Tvoj problem bude najskor to bufferOneIsClear. Naplnis prvy buffer nastavis to na false, naplnis druhy buffer nastavis to zas na true bez toho aby si vobec vedel ci to uz bolo precitane, a v tom druhom thrade na zaklade toho testujes veci pricom sa ti za jazdy tato premenna moze zmenit. Ziskas mutex1 a potom sa ti zmeni tato premenna za jazdy a neskor na zaklade nej testujes ktory mutex uvolnit??? To je absolutny chaos tak nebezpecny ze az.
Povyhadzuj vsetky stavove premenne uplne vsetko zmaz a zacni robit to co kazdy slusny vyvojar - NAJPRV na papier albeo v hlave logicky navrh datovych struktur a mutexov a premennych tak aby to nebol nebezpecny chaos meniacich sa veci za jazdy, POTOM zacat pisat kod :)
Alebo
tu sa ti moze za jazdy zmenit bufferOneIsClearif(bufferOneIsClear == false){//ctu z bufferu 1
waitResult = WaitForSingleObject( mutexBuffer1, INFINITE);
SetEvent(eventToBuffering);
cout<<"Ctu z bufferu 1.."<<endl;
return;
}
nectes.if(bufferOneIsClear == true){//ctu z bufferu 2