【发布时间】:2014-04-07 05:44:43
【问题描述】:
我想创建一个队列来存储我的任务,我希望它是一个缓冲队列,并且我想使用信号量来保持它的线程安全,因为我使用多个线程来执行从任务队列..当队列的大小小于buffer_size(我定义的变量)时,add_task线程会将新任务推送到任务队列,当队列满时,任务线程会被阻塞,所以我需要最大值等于 buffer_size 的信号量。
我知道在windows api中有CreateSemophore,我可以在其中设置信号量的最大值:
CreateSemaphore(
NULL, // default security attributes
MAX_SEM_COUNT, // initial count
MAX_SEM_COUNT, // maximum count
NULL); // unnamed semaphore
但是在linux中,我只能得到sem_init函数:
int sem_init (sem_t *sem, int pshared, unsigned int value)
我只能设置初始值,但最大值据说是int的范围..
所以我的问题是如何在 Linux 上的 C++ 中创建具有最大值的信号量?
【问题讨论】:
标签: c++ linux multithreading