线程同步 - 写入器优先级锁定

时间:2011-11-13 23:17:11

标签: c synchronization pthreads

所以,我在unix系统上使用C并且可以访问pthreads& semaphore.h库。

这是问题(我相信这归结为“作家优先级锁定”问题):

为了简单起见,我有一个线程可以运行的两个不同的进程:A&乙

B比A更重要,因此如果有B等待运行,我不希望在所有B进程运行之前不再有A进程开始执行。此外,虽然多个A进程可以同时运行,但一次只能执行1个B进程。

我这样做的当前方式(我认为是错误的,低效的,或两者兼而有之)是让B进程需要锁定整个执行时间,A进程将获取并立即释放锁定他们执行的开始。我也在这里使用信号量来允许多阅读器/单一写入器功能。

由于各种原因,pthread_rwlock功能在此系统上不可用,因此解决方案不能涉及它们。

1 个答案:

答案 0 :(得分:0)

如果A要立即释放锁,但继续使用你要锁定的任何资源,那为什么你甚至打扰锁定开始?

你说: - 多个A可以同时运行 - 只有一个B可以一次运行

我在假设(但如果我错了,请纠正我): -B和A不能同时运行

如果您立即从A释放锁定,那么将允许B同时运行。我在这里错过了什么吗?

解决方案:

有一种获取线程资源的机制。该机制仅在第一个A线程启动时锁定资源,并仅在所有A线程都消失时释放它。

要使用的A线程的取消令牌在B线程开始时设置为true,然后当所有A线程退出B线程时都可以开始。

B线程明显锁定,直到完成后才会释放。

不要忘记在A线程中经常检查取消令牌,这样在询问时退出时间不会太长。