线程:共享资源特殊情况



我有某种资源可以由两种类型的任务使用:由许多不同线程同时运行的普通任务和很少由单个线程运行的特殊任务。

我的目标是:

所有正常任务
  1. 都应该能够正常访问此资源,除非特殊任务正在运行。
  2. 特殊任务还应等到此资源释放(从可能正在运行的任何正常任务中)。
  3. 如果特殊任务未运行,则普通任务应该能够同时使用此资源(它是线程安全的)。

确切地说,我有一个 Rabbit-MQ 队列,此资源可以访问该队列以弹出消息。调用我的 Web 服务的任何用户都可以同时使用此资源(弹出消息)。但是,我有一个特殊功能可以清除队列并用来自数据库的消息重新填充队列。

我的挑战是仅针对此特殊任务锁定对象,但同时允许正常任务并发使用它。

你的目标听起来就像ReadWriteLock的用例,它只允许一个编写器,如果没有编写器,则允许任意读取器。特殊任务可以采用写锁定,所有其他任务可以采用读锁定。

最新更新