首页 > 解决方案 > 是否可以让一个线程只获得一个信号量的许可证,直到下一个版本?

问题描述

我使用信号量:

 private Semaphore sem_Container = new Semaphore(3, true);

和 2 个线程共享许可。第三个线程什么也不做,然后释放信号量。

现在发生了,有时两个阅读器线程之一在一个时期内没有获得一个许可。

请参阅此日志:

//Period1
D/Td_GetNewData_VM_MA
D/Td_GetNewData_VM_MA
D/Td_GetNewData_VM_M
//Period2
D/Td_GetNewData_VM_MA
D/Td_GetNewData_VM_MA
D/Td_GetNewData_VM_MA
//Period3
D/Td_GetNewData_VM_M
D/Td_GetNewData_VM_MA
D/Td_GetNewData_VM_MA

我认为在我的示例中发生的情况是一个线程acquire()连续调用了 3 次,因为当时系统还没有执行另一个线程......

由于“公平”仅意味着信号量只是确保队列中等待时间最长的线程获得许可,是否也可以确保每个线程都获得许可?或者至少每个线程都可以获取一个?

标签: javamultithreadingsemaphore

解决方案


推荐阅读