c/c++ linux 进程间通信系列7,使用pthread mutex
程序员文章站
2022-06-22 12:02:08
linux 进程间通信系列7,使用pthread mutex c++ include include include include include include int main(){ pthread_mutex_t m; pthread_mutexattr_t mat; int shmid; ......
linux 进程间通信系列7,使用pthread mutex
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/shm.h> #include <pthread.h> #include <sys/wait.h> int main(){ pthread_mutex_t *m; pthread_mutexattr_t mat; int shmid; pid_t pid; shmid = shmget(ipc_private, sizeof(pthread_mutex_t), 0600); if(shmid < 0){ perror("shmget"); return 1; } m = (pthread_mutex_t*)shmat(shmid, null, 0); //准备设定mutex的attribute pthread_mutexattr_init(&mat); //利用mutex进行进程间的通信 //底下这句没有的话,这个mutex只在本进程间有作用 if(pthread_mutexattr_setpshared(&mat, pthread_process_shared) != 0){ perror("pthread_mutexattr_setpshared"); return 1; } pthread_mutex_init(m, &mat); pid = fork(); printf("[%s] before pthread_mutex_lock()\n", pid == 0 ? "child" : "parent"); if(pthread_mutex_lock(m) != 0){ perror("pthread_mutex_lock"); return 1; } printf("[%s] press enter\n", pid == 0 ? "child" : "parent"); getchar(); if(pthread_mutex_unlock(m) != 0){ perror("pthread_mutex_unlock"); return 1; } printf("[%s] after pthread_mutex_lock()\n", pid == 0 ? "child" : "parent"); shmdt(m); if(pid != 0){ wait(null);//wait child process to complete printf("[%s] after wait()\n", pid == 0 ? "child" : "parent"); //delete shared memery if(shmctl(shmid, ipc_rmid, null) != 0){ perror("shmctl"); return 1; } } return 0; }
编译方法:
g++ -g process-41-pthread-mutex.cpp -std=c++11 -pthread
运行结果:
[parent] before pthread_mutex_lock() [parent] press enter [child] before pthread_mutex_lock() 敲回车 [parent] after pthread_mutex_lock() [child] press enter 敲回车 [child] after pthread_mutex_lock() [parent] after wait()
c/c++ 学习互助qq群:877684253
本人微信:xiaoshitou5854
上一篇: 《C语言及程序设计》实践项目11 算术运算符与算术表达式
下一篇: gradle配置国内镜像
推荐阅读
-
c/c++ linux 进程间通信系列3,使用socketpair,pipe
-
c/c++ linux 进程间通信系列4,使用共享内存
-
c/c++ linux 进程间通信系列6,使用消息队列(message queue)
-
c/c++ linux 进程间通信系列5,使用信号量
-
c/c++ linux 进程间通信系列7,使用pthread mutex
-
c/c++ linux 进程间通信系列2,使用UNIX_SOCKET
-
c/c++ linux 进程间通信系列1,使用signal,kill
-
c/c++ linux 进程间通信系列7,使用pthread mutex
-
c/c++ linux 进程间通信系列3,使用socketpair,pipe
-
c/c++ linux 进程间通信系列4,使用共享内存