所以,我在unix系统上使用C并且可以访问pthreads& semaphore.h库。
这是问题(我相信这归结为“作家优先级锁定”问题):
为了简单起见,我有一个线程可以运行的两个不同的进程:A&乙
B比A更重要,因此如果有B等待运行,我不希望在所有B进程运行之前不再有A进程开始执行。此外,虽然多个A进程可以同时运行,但一次只能执行1个B进程。
我这样做的当前方式(我认为是错误的,低效的,或两者兼而有之)是让B进程需要锁定整个执行时间,A进程将获取并立即释放锁定他们执行的开始。我也在这里使用信号量来允许多阅读器/单一写入器功能。
由于各种原因,pthread_rwlock功能在此系统上不可用,因此解决方案不能涉及它们。
答案 0 :(得分:0)
如果A要立即释放锁,但继续使用你要锁定的任何资源,那为什么你甚至打扰锁定开始?
你说: - 多个A可以同时运行 - 只有一个B可以一次运行我在假设(但如果我错了,请纠正我): -B和A不能同时运行
如果您立即从A释放锁定,那么将允许B同时运行。我在这里错过了什么吗?
解决方案:
有一种获取线程资源的机制。该机制仅在第一个A线程启动时锁定资源,并仅在所有A线程都消失时释放它。
要使用的A线程的取消令牌在B线程开始时设置为true,然后当所有A线程退出B线程时都可以开始。
B线程明显锁定,直到完成后才会释放。
不要忘记在A线程中经常检查取消令牌,这样在询问时退出时间不会太长。