姬長信(Redy)

c – ReleaseSemaphore不释放信号量


(简而言之:main()的WaitForSingleObject在下面的程序中挂起).

我正在尝试编写一段代码来调度线程并等待它们在恢复之前完成.我不是每次创建线程都是昂贵的,而是让它们进入睡眠状态.主线程在CREATE_SUSPENDED状态下创建X线程.

使用X作为MaximumCount的信号量完成同步.信号量的计数器被降低到零并且线程被分派. threds执行一些愚蠢的循环并在他们进入睡眠之前调用ReleaseSemaphore.然后主线程使用WaitForSingleObject X次,以确保每个线程完成其工作并正在休眠.然后它循环并再次完成所有操作.

程序不时会退出.当我喙程序时,我可以看到WaitForSingleObject挂起.这意味着线程的ReleaseSemaphore不起作用.没有什么是打印的,所以据说没有出错.

也许两个线程不应该在同一时间调用ReleaseSemaphore,但这会使信号量的目的无效……

我只是不理睬它……

我们非常感谢其他同步线程的解决方案!

#define TRY  100
#define LOOP 100

HANDLE *ids;
HANDLE semaphore;

DWORD WINAPI Count(__in LPVOID lpParameter)
{ 
 float x = 1.0f;   
 while(1)
 { 
  for (int i=1 ; i