#include
2 #include
3 #include
4 #include
5
6 void print(pid_t);
7
8 sem_t *sem;
9 int val;
10 int main(int argc,char *argv[])
11 {
12 int n = 0;
13 if(argc != 2);
14 {
15 printf("please input afile name!\n");
16 exit(1);
17 }
18 sem = sem_open(argv[1],O_CREAT,0644,2);
19
20 while(n++<5)
21 {
22 if(fork()==0)
23 {
24 sem_wait(sem);
25 print(getpid());
26 sleep(1);
27 sem_post(sem);
28 printf("I'm finished,my pid is %d\n",getpid());
29 return 0;
30 }
31 }
32
33 wait();
34 sem_close(sem);
35 sem_unlink(argv[1]);
36 exit(0);
37 }
38
39 void print(pid_t pid)
40 {
41 printf("I get it,my pid is %d\n",pid);
42 sem_getvalue(sem,&val);
43 printf("Now the value have %d\n",val);
44 }
多线程 linux下gcc编译一直通不过
- 写回答
- 好问题 1 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 普通网友 2017-05-07 16:01关注
try compile this with
gcc sem.c -o sem -lrt
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <semaphore.h> #include <stdlib.h> #include <stdio.h> #include <unistd.h> void print(pid_t); sem_t *sem; int val; int main(int argc,char *argv[]) { int n = 0; if(argc != 2); { printf("please input afile name!\n"); exit(1); } sem = sem_open(argv[1],O_CREAT,0644,2); while(n++<5) { if(fork()==0) { sem_wait(sem); print(getpid()); sleep(1); sem_post(sem); printf("I'm finished,my pid is %d\n",getpid()); return 0; } } wait(); sem_close(sem); sem_unlink(argv[1]); exit(0); } void print(pid_t pid) { printf("I get it,my pid is %d\n",pid); sem_getvalue(sem,&val); printf("Now the value have %d\n",val); }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 Mysql 一张表同时多人查询和插入怎么防止死锁
- ¥20 centos6.7 安装libevent库.总是报错,如何解决?
- ¥15 电脑买回,学校的有线网络总掉。
- ¥20 关于普洛菲斯触摸屏与AB连接地址问题
- ¥15 vue但是页面显示的数据为空为什么呀,明明在钩子函数中已经成功赋值(相关搜索:输出数据)
- ¥15 syri可视化不显示插入缺失
- ¥30 运行软件卡死查看系统日志分析不出来
- ¥15 C语言代码改正特征选择算法设计,贝叶斯决策,,设计分类器,远程操作代码修正一下
- ¥15 String 类valuve指向的问题
- ¥15 在ros2的iron版本进行编译时遇到如下问题