因此,在我正在编写的程序中,我有三个函数,为简单起见,我们称它们为A,B和C.每个功能需要访问资源X才能工作。锁/条件变量问题
限制是A和B不允许同时运行,并且必须适当同步。 C允许与A或B同时运行。
这导致了一些问题。
首先,我尝试在A和B上放置锁,因此当A被调用时,它获取对X的锁,然后释放它并与B相同。这样A和B就按顺序运行。但是,如果我以这种方式使用锁定,C无法与A或B同时运行。
所以我尝试使用条件变量,其中A必须等待来自B的信号,如果B正在运行且B必须等待来自A的信号,但是这种相互依赖的呼叫似乎也不起作用。
不知道该怎么做。
如果从C到资源的访问不需要被序列化,那么你不需要对C进行任何锁定但是这是一个非常奇怪的情况(同时运行不会有'这意味着他们可以在同一时刻访问共享资源)。请发布更多关于你想要做什么以及你正在使用的操作系统/语言的详细信息 –
我在我的Mac上用C写我的代码。所以这里的共享资源是银行的一个分支,功能A和B分别是取款和存款,C是转账。我不应该同时从同一分行(即使在分行的不同账户)进行提款和存款,但只要进行转账的账户与分行不同,我可以在分行内同时进行转账处理存款/取款的人。这与保持总分支平衡不被破坏有关。 – user1782677
所以只是不要把任何锁定转移(但你必须以某种方式锁定在较低的水平帐户)。如何实现这取决于你正在使用的是什么(这是一个例子,你直接访问数据库?你与某种服务交谈?)。就我个人而言,我不会使用双锁,所以我会使用帐户级别的锁定(对于A,B和C)扩展到_any account_ for A和B.因为这些操作来自人类用户,您可能会认为使用像A/B对C的数据库常用的_optimistic lock_和A和B的简单sw锁。 –