你好,我在c ++中遇到了mutex的问题
我有以下内容 code
我尝试做像消费者/制作人这样的事情,我有两个线程。第一个线程用于将一些二进制数据读入第一个或第二个缓冲区。第二个线程是theese数据的消费者。它工作正常,但我想将拆分读取函数ParseDataFromBuffer()分成两个函数,如下所示:
void ParseDataFromBuffer(){
DWORD waitResult = WaitForSingleObject( eventToParse, INFINITE);
//nejaky if
/*
Pokud je naplnen buffer 1 prazdny, pak ctu z bufferu2 a naopak
Ihned pred zahajenim cteni posilam event pro buffer, aby moh pokracovat
v plneni dalsiho bufferu
*/
if(bufferOneIsClear == false){//ctu z bufferu 1
waitResult = WaitForSingleObject( mutexBuffer1, INFINITE);
SetEvent(eventToBuffering);
cout<<"Reading from buffer 1.."<<endl;
//Sleep(8000); //I dont want theese
//cout<<"Buffer 1 is read.."<<endl; // lines
//ReleaseMutex( mutexBuffer1); //....
return;
}
if(bufferOneIsClear == true){//ctu z bufferu 2
waitResult = WaitForSingleObject( mutexBuffer2, INFINITE);
SetEvent(eventToBuffering);
cout<<"Reading from buffer 2.."<<endl;
//Sleep(7000);
//cout<<"Buffer 2 is read.."<<endl;
///ReleaseMutex(mutexBuffer2);
return;
}
}
此功能适用于发布互斥:
void ParseDataFromBufferEnd(){
if(bufferOneIsClear == false){
ReleaseMutex(mutexBuffer1);
return;
}
if(bufferOneIsClear == true){
ReleaseMutex(mutexBuffer2);
return;
}
}
在while循环中,我想要这样的东西:
void ThreadStartUp(){
//while
while(buffers->getContinueProcessing()){
buffers->ParseDataFromBuffer();
Sleep(8000); //there i will parse data from buffer..
buffers->ParseDataFromBufferEnd();
}
}
编辑:我意识到,问题出在Sleep()函数中。我不知道为什么,但是在Sleep函数中的数字。方法ThreadStartUp()比Sleep()函数中的数字更大。在方法ReadDataFromPath中,它不会工作。不知道为什么..我认为事件功能会阻止这一点,但看起来,他们不会。
edit2:我从中得出结论,这个问题出现在互斥体中。你应该知道,互斥体可以在一个函数中使用而在其他函数中可以自由使用,但在我的情况下则不行。
有人能告诉我,我在哪里错过了吗?
由于