【问题标题】:Synchronized access to data in shared memory between two processes [duplicate]在两个进程之间同步访问共享内存中的数据[重复]
【发布时间】:2016-10-19 19:59:42
【问题描述】:

我有两个在共享内存中有数据的进程。此数据将通过这两个过程进行更新。我正在寻找两个进程之间的一些锁定机制。使用线程很容易拥有共享互斥锁。就我而言,我尝试将互斥变量保存在共享内存中,然后两个进程都将使用该变量进行锁定。然而这并没有奏效。如何在两个进程之间共享互斥锁。有人说互斥锁不能共享,使用信号量。为什么互斥量不能共享而信号量可以?

【问题讨论】:

    标签: c synchronization ipc shared-memory


    【解决方案1】:

    有可能,你必须使用标志 PTHREAD_PROCESS_SHARED:

    pthread_mutexattr_t mattr;
    pthread_mutexattr_init(&mattr);
    pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_SHARED);
    
    
    // Init the shared mem barrier
    if ( (rv = pthread_mutex_init(&nshared, &mattr)) != 0 ) {
          fprintf(stderr, "Failed to initiliaze the shared mutex.\n");
          return rv;
    }
    

    变量nshared在共享内存中的映射。

    看看这个documentation。另外,请记住,互斥锁的默认值是不在进程之间共享它。

    另外,看看这些帖子post1post2

    检查互斥锁状态的奖励代码:

    void showPshared(pthread_mutexattr_t *mta) {
      int           rc;
      int           pshared;
    
      printf("Check pshared attribute\n");
      rc = pthread_mutexattr_getpshared(mta, &pshared);
    
      printf("The pshared attributed is: ");
      switch (pshared) {
      case PTHREAD_PROCESS_PRIVATE:
        printf("PTHREAD_PROCESS_PRIVATE\n");
        break;
      case PTHREAD_PROCESS_SHARED:
        printf("PTHREAD_PROCESS_SHARED\n");
        break;
      default :
        printf("! pshared Error !\n");
        exit(1);
      }
      return;
    }
    

    我不记得我是不是拿了这段代码……找到了! here是hal知识的来源。

    【讨论】:

      猜你喜欢
      • 2014-07-18
      • 1970-01-01
      • 1970-01-01
      • 2010-11-15
      • 1970-01-01
      • 2018-07-06
      • 2014-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多