Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 基于pthread_互斥体的进程间通信不工作_C++_Linux_Pthreads - Fatal编程技术网

C++ 基于pthread_互斥体的进程间通信不工作

C++ 基于pthread_互斥体的进程间通信不工作,c++,linux,pthreads,C++,Linux,Pthreads,我目前正在尝试使用pthread_互斥模型在Linux中同步两个进程 以下是我正在编写的代码: #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> using namespace std; int main (int argc, char **argv) { printf ("starting process\n");

我目前正在尝试使用pthread_互斥模型在Linux中同步两个进程

以下是我正在编写的代码:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>

using namespace std;

int main (int argc, char **argv)
{
    printf ("starting process\n");

    if (_POSIX_THREAD_PROCESS_SHARED == -1) {
        printf ("shared mutex is not supported!\r\n");
    }

    pthread_mutexattr_t attr;
    pthread_mutex_t shm_mutex;


    if (pthread_mutexattr_init(&attr) != 0)
        printf ("init attr error!\r\n");
    if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_NORMAL) != 0)
        printf ("set type error!\r\n");
    if (pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED) != 0)
        printf ("set shared error!\r\n");

    int value;
    if (pthread_mutexattr_getpshared(&attr, &value) != 0 || value != PTHREAD_PROCESS_SHARED) {
        printf ("mutex is not shared!\r\n");
    }

    if (pthread_mutex_init(&shm_mutex, &attr) != 0)
        printf ("mutex init error!\r\n");

    for (int i=0; i < 10; i++) {

        if (pthread_mutex_lock(&shm_mutex) != 0)
            printf ("lock error!\r\n");

        printf ("begin run %d\r\n", i);
        sleep(10);
        printf ("end run %d\r\n", i);

        if (pthread_mutex_unlock(&shm_mutex) != 0)
            printf ("unlock error!\r\n");

        sleep(1); // sleep 1 second
    }

    pthread_mutex_destroy(&shm_mutex);
    pthread_mutexattr_destroy(&attr);

    return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main(int argc,字符**argv)
{
printf(“启动进程\n”);
if(_POSIX_THREAD_PROCESS_SHARED==-1){
printf(“不支持共享互斥!\r\n”);
}
pthread_mutextatr_t attr;
pthread_mutex_t shm_mutex;
if(pthread_mutexattr_init(&attr)!=0)
printf(“初始化属性错误!\r\n”);
if(pthread\u mutexattr\u settype(&attr,pthread\u MUTEX\u NORMAL)!=0)
printf(“设置类型错误!\r\n”);
if(pthread\u mutexattr\u setpshared(&attr,pthread\u PROCESS\u SHARED)!=0)
printf(“设置共享错误!\r\n”);
int值;
if(pthread_mutexattr_getpshared(&attr,&value)!=0 | | value!=pthread_PROCESS_SHARED){
printf(“互斥对象未共享!\r\n”);
}
if(pthread\u mutex\u init(&shm\u mutex,&attr)!=0)
printf(“互斥初始化错误!\r\n”);
对于(int i=0;i<10;i++){
if(pthread\u mutex\u lock(&shm\u mutex)!=0)
printf(“锁定错误!\r\n”);
printf(“开始运行%d\r\n”,i);
睡眠(10);
printf(“结束运行%d\r\n”,i);
if(pthread\u mutex\u unlock(&shm\u mutex)!=0)
printf(“解锁错误!\r\n”);
睡眠(1);//睡眠1秒
}
pthread_mutex_destroy(&shm_mutex);
pthread_mutexattr_destroy(&attr);
返回0;
}
当我运行两个单独的进程时,开始/结束逻辑不起作用


代码有什么问题吗?

您应该自己在共享内存中分配
shm\u互斥体。请参见
man shm\U概述
。该标志仅表示允许您使用互斥锁执行此操作


有关更多详细信息,请参阅。

我认为您需要在共享内存中分配互斥锁,这样才能实现进程间共享。在您的代码中,进程无法识别它们将共享哪个互斥体。