多线程同步,关于Semaphore问题
我想让主线程发一个信号唤醒制定的一个线程,然后再由唤醒后的这个线程在发送另外一个信号唤醒另一个线程。
主线程:
A
{
...
h1 = CreateSemaphore( NULL, cMax,cMax, NULL); // unnamed semaphore
printf("signal");
if (hSemaphore == NULL)
{
printf("CreateSemaphore 1 error: %d\n", GetLastError());
}
if (!ReleaseSemaphore(h1,1, NULL) )
{
printf("Release h1 error: %d\n", GetLastError());
}
Sleep(3000);
CloseHandle(h1);
..
}
需要唤醒的第一个线程
B
{
...
DWORD dwWaitResult;
dwWaitResult = WaitForSingleObject(h1,0L);
switch (dwWaitResult)
{
case WAIT_OBJECT_0:
{
...
h2 = CreateSemaphore(NULL,cMax,cMax,NULL);
if (h2 == NULL)
{
printf("CreateSemaphore 2 error: %d\n", GetLastError());
}
if (!ReleaseSemaphore(h2,1, NULL) )
{
printf("Release h2 error: %d\n", GetLastError());
}
Sleep(3000);
CloseHandle(h2);
}
...
}
B要唤醒的线程
C
{
DWORD dwWaitResult;
dwWaitResult = WaitForSingleObject(hRecvSemaphore,0L);
switch (dwWaitResult)
{
case WAIT_OBJECT_0:
{
...
}
break;
}
...
可是为什么Release h2 error?