在开发过程中,我需要两个线程,其中一个为生产者,一个为消费者。
为了在两个线程之间传递消息,我自己定义了一个list作为消息队列。同时为了避免消费者定时检测消息队列,我使用了一个同步量来控制消费者对消息队列的访问。
处理过程如下:
首先调用hSemaphore = CreateSemaphore(NULL,0,1000,"MSGSEMAPHORE")创建一个同步量,初始值为0,最大值为1000;
在生产者线程里,当向list插入一个消息之后,调用ReleaseSemaphore(hSemaphore,1,NULL)增加同步量的计数器;
在消费者线程里,根据WaitForSingleObject(hSemaphore,1000)的返回值是否是WAIT_OBJECT_O来取得同步量。
奇怪的问题是:我通过调试发现在ReleaseSemaphore、WaitForSingleObject都没有出错而且list的size的确大于0,但消费者却没能取得同步量hSemaphore或者取得的频率明显低于生产者释放同步量的频率。
目前,生产者线程每4秒产生一个消息,消费者检测同步量的间隔不定,最大为每秒一次(如果超时,需要等一秒才知道,如果取得了同步量,就不用等1秒啦)。
这个问题也不是每次都会发生,运行正常时也一切OK,一旦出现这个问题,队列就会越来越大。
请高手指定问题所在!!!