微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

IPC在多个进程之间使用共享条件variables

我正试图在两个进程(Process1和Process2)之间使用共享内存来实现IPC而不用浪费cpu等待轮到它。 它基本上是在多个过程场景中使用条件variables

虽然我可以在亲子场景中做到这一点,但却无法做到两个单独的过程(process1&process2)场景。

这是我在亲子场景中所做的。

****使用PTHREAD_PROCESS_SHARED标志创buildmptr(共享互斥)和cvptr(条件variables),****

当编译不同的程序时,sizeof返回一个结构体的不同值

获取两个文件描述符而不使用pipe()

如何自动更新Docker实例之间共享的计数器

Ashmem保留政策

我有一个在Linux上运行的C ++程序,是否有可能让它周期性地将状态快照存储在共享内存中用于故障恢复?

pthread_cond_t *cvptr; //Condition Variable Pointer pthread_condattr_t cattr; //Condition Variable Attribute pthread_mutex_t *mptr; //Mutex Pointer pthread_mutexattr_t matr; //Mutex Attribute int shared_mem_id; //shared memory Id int *mp_shared_mem_ptr; //shared memory ptr -- pointing to mutex int *cv_shared_mem_ptr; //shared memory ptr -- pointing to condition variable // Setup Mutex rtn = pthread_mutexattr_init(&matr); rtn = pthread_mutexattr_setpshared(&matr,PTHREAD_PROCESS_SHARED); rtn = pthread_mutex_init(mptr,&matr); //Setup Condition Variable rtn = pthread_condattr_init(&cattr); pthread_condattr_setpshared(&cattr,PTHREAD_PROCESS_SHARED)); pthread_cond_init(cvptr,&cattr);

从父进程发送信号

sleep(2); pthread_cond_signal( cvptr ); // send signal to child process

并在subprocess中等待信号。

pthread_cond_wait( cvptr,mptr );

根据条件variables的属性,当孩子等待轮到它时,不会浪费任何cpu周期。

为了确保,父节点必须在孩子开始等待信号后才发送信号,在pthread_cond_signal(cvptr)之前joinsleep(2 );

当我在两个过程场景中使用相同的概念时,process2没有从process1获得任何信号。

Process2正在无限等待。 在似乎信号丢失。

我首先运行process2,然后运行process1以确保process1信号必须在process2开始等待之后才能交付。

我在哪里犯错?

我正在使用ubuntu12.04和gcc。 任何帮助实现相同将高度赞赏。 提前致谢。

注:我可以使用简单的共享内存概念在多进程之间进行IPC,其中最初的shared_variable值= 0,process1将其设为1以通知process2启动其工作,之后process2更改shared_variable = 0并继续。 这个解决scheme实际上是在等待共享variables的更新值继续工作的同时浪费cpu的。 像while (shared_stuff->written_by_you == 1) {do nothing;}

最快的IN PROCESS技术在win32 / C / C ++中共享内存和IPC

SYstem进程可以与非SYstem进程共享数据吗?

一个数组结构初始化为共享内存

mmap物理连续的内存

写入共享内存时发生总线错误

显示代码中可以看出,让我说明一下:

你应该把互斥和条件变量放在共享内存中,通过共享内存使它们可用。 将指针放在共享内存中是不够的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐