我有一个发送者线程和40个工作线程。只有一个队列。所有40个线程均写入队列,发送方线程定期从共享队列中读取数据,并通过tcp套接字发送读取的数据(例如,每1秒,发送方线程必须从队列中读取数据并通过套接字发送数据)。我在这里有一个问题:
换句话说,我想将发送方线程的优先级设置为1,即当发送方线程调用EnterCriticalSection()时,所有其他等待进入关键部分的线程都必须被忽略,并且只要关键部分空闲,它就必须被释放。给发送者线程。
有什么方法可以实现此功能?
最佳答案
您不能仅使用优先级来实现它,因为如果任何工作线程持有一个锁,那么优先级就不能强制他们释放它。这是我可以考虑的一种实现。
一旦发送方线程在1秒钟的持续时间内醒来,它将向工作进程发送一个信号。并且在信号处理程序中释放由 worker 持有的锁(我猜这里二进制信号量会很好,因此在信号处理程序中将其值设置为0),因此无论任何尝试访问它的工作线程都将被阻塞。在发送方发送所有数据包,最后再次将信号量设置回1。
这是一个实现,您可以认为自己会这样,但最终它应该可以工作。:)
关于c - 线程同步和设置线程的优先级,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17441183/