【发布时间】:2020-04-26 11:24:00
【问题描述】:
我有一个问题,我有多个线程(读取线程)要读取共享数据,到目前为止没有问题。 此共享数据将在另一个单线程(写入线程)中更新。
在此写入期间,不应进行读取以防止损坏数据。
我最初的想法是在阅读后使用信号量(Posix 信号量,)。
使用 sem_wait() 和 sem_post() 可以很好地阻止、减少和增加读取线程内的信号量。只要信号量不为 0,sem_wait() 就不会阻塞并允许线程读取数据。
我的问题从这里开始。 现在我想让写线程的条件与 sem_wait() 的实际作用相反。只要信号量大于零,我希望写入线程被阻塞,因为这意味着有一个读取线程正在进行中。
当信号量大于 0 时,有什么方法可以阻止它,或者有什么不同的方法可以解决这个问题?
谢谢!
【问题讨论】:
-
信号量是一个糟糕的选择。 POSIX 提供读/写锁。但实际上最好只使用互斥锁,因为它的锁定/解锁开销最小。
标签: c multithreading semaphore