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