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.
Inquesto codice potete vedere che mi manca una funzione mutex_lock o simile per poter tagliare fuori un thread da una eventuale regione critica.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); }
Ho trovato la funzione CloseHandle, ma non riesco a farla funzionare come voglio io.
Fatemi sapere

Rispondi quotando
