【问题标题】:looking for a mechanism for semaphore interlocks?寻找信号量联锁机制?
【发布时间】:2014-02-17 04:17:25
【问题描述】:

我有两个大小为 10 的信号量。这两个信号量是互斥的,这样:

最初这两个信号量是空的。如果其中一个信号量有内容,它会阻塞另一个信号量,使其不能被内容填充。只有当原始信号量被清空时,它才会解除阻塞另一个信号量。然后这个过程继续。

在编程意义上,如果一个信号量有内容,另一个信号量就会被内核阻塞。我将如何实施这样的锁?

【问题讨论】:

  • 信号量被解释为资源计数器。你想要一个奇怪的资源,当它存在时,其他资源不能添加到池中。你最好不用信号量来解释你的任务,只用资源或消息之类的术语。

标签: concurrency semaphore


【解决方案1】:

可以定义一个这样的类并使用额外的Pairing Boolean

 class semaphore

{
            int value;
            Boolean Locked;
            Boolean Paired;


        voidsetvalue(int val)
        {
           if(Paired==true)
           {
           Locked=true
           }

           if(locked==false)
           {
           value=val;
           locked=true;
           }

         }
         void release()
         {
            Locked=false;
            value=0; 
          }
         void releasepair()
         {
            Paired=false;

         }

}

【讨论】:

    猜你喜欢
    • 2014-04-24
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 2014-04-24
    • 2014-09-24
    • 2021-03-20
    • 2011-01-15
    相关资源
    最近更新 更多