我有一个发送者线程和40个工作线程。只有一个队列。所有40个线程均写入队列,发送方线程定期从共享队列中读取数据,并通过tcp套接字发送读取的数据(例如,每1秒,发送方线程必须从队列中读取数据并通过套接字发送数据)。我在这里有一个问题:

  • 如果40个线程中的任何一个处于关键部分,并且所有其他线程也都在等待进入关键部分,并且同时1秒钟计时器计时结束,我想忽略所有其他线程进入关键部分的请求,并且必须立即为发件人线程赋予优先级,并且必须为它提供关键部分。

  • 换句话说,我想将发送方线程的优先级设置为1,即当发送方线程调用EnterCriticalSection()时,所有其他等待进入关键部分的线程都必须被忽略,并且只要关键部分空闲,它就必须被释放。给发送者线程。
    有什么方法可以实现此功能?

    最佳答案

    您不能仅使用优先级来实现它,因为如果任何工作线程持有一个锁,那么优先级就不能强制他们释放它。这是我可以考虑的一种实现。

    一旦发送方线程在1秒钟的持续时间内醒来,它将向工作进程发送一个信号。并且在信号处理程序中释放由 worker 持有的锁(我猜这里二进制信号量会很好,因此在信号处理程序中将其值设置为0),因此无论任何尝试访问它的工作线程都将被阻塞。在发送方发送所有数据包,最后再次将信号量设置回1。

    这是一个实现,您可以认为自己会这样,但最终它应该可以工作。:)

    关于c - 线程同步和设置线程的优先级,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17441183/

    10-17 01:35