Il mio problema attuale è riuscire a fare condividere una variabile a due thread concorrenti in ambiente Windows.
Ho trovato delle funzioni interessanti (la CreateMutex, la WaiForSingleObject e la ReleaseMutex) ma non sono ancora riuscito a trovarne una che faccia diventare "rosso" il semaforo di mutua esclusione.
codice:
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
DWORD WINAPI concurrent (void *);
HANDLE full,
empty,
conc;
int id;
LPDWORD ID=(LPDWORD)&id;
int main (){
char c=' ';
full=CreateMutex(NULL,TRUE,"full"); /*semaforo inizia occupato*/
empty=CreateMutex(NULL,FALSE,"empty");/*questo inizia libero*/
conc = CreateThread(NULL,0,concurrent,NULL,0,ID);/*lancio thread*/
if (conc==NULL)
printf("creazione thread fallita\n");
while (TRUE){
WaitForSingleObject(empty,INFINITE); /*aspetto empty==TRUE*/
/*eventuale regione critica*/
ReleaseMutex(full);
}
return 0;
}
DWORD WINAPI concurrent (void * dati){
printf ("inizio TRUE=%d\n",TRUE);
while (TRUE){
WaitForSingleObject(full,INFINITE);
/*eventuale regione critica*/
printf ("stampo\n");
ReleaseMutex(empty);
}
TerminateThread(conc,0);
}
Inquesto codice potete vedere che mi manca una funzione mutex_lock o simile per poter tagliare fuori un thread da una eventuale regione critica.
Ho trovato la funzione CloseHandle, ma non riesco a farla funzionare come voglio io.
Fatemi sapere