下面代码哪出错了啊?linux的多线程

#include
2 #include
3 #include
4 #include
5 #include
6
7 void *thread_function(void *arg);
8 void print(pid_t);
9 sem_t *sem;
10 int val;
11 pthread_t a_thread;
12
13 int main(int argc,char *argv[])
14 {
15 int n = 0;
16
17 if(argc != 2)
18 {
19 printf("please input a file name!\n");
20 exit(1);
21 }
22 sem = sem_open(argv[1],O_CREAT,0644,3);
23
24 while(n++<5)
25 {
26 if((pthread_create(&a_thread,NULL,thread_function,NULL)) != 0)
27 {
28 perror("Thread creation failed");
29 exit(1);
30 }
31 }
32
33 pthread_join(a_thread,NULL);
34 sem_close(sem);
35 sem_unlink(argv[1]);
36 }
37
38 void *thread_function(void *arg)
39 {
40 sem_wait(sem);
41 print();
42 sleep(1);
43 sem_post(sem);
44 printf("I'm finished,my tid is %d\n",pthread_self());
45 }
46
47 void print()
{
49 printf("I get it,my tid is %d\n",pthread_self());
50 sem_getvalue(sem,&val);
51 printf("Now the value have %d\n",val);
52 }

2个回答

OK try this

compile with gcc thd.c -o thd -lpthread -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 *thread_function(void *arg);
void print();
sem_t *sem;
 int val;
 pthread_t a_thread;

 int main(int argc,char *argv[])
 {
 int n = 0;

 if(argc != 2)
 {
 printf("please input a file name!\n");
 exit(1);
 }
 sem = sem_open(argv[1],O_CREAT,0644,3);

 while(n++<5)
 {
 if((pthread_create(&a_thread,NULL,thread_function,NULL)) != 0)
 {
 perror("Thread creation failed");
 exit(1);
 }
 }

 pthread_join(a_thread,NULL);
 sem_close(sem);
 sem_unlink(argv[1]);
 }

 void *thread_function(void *arg)
 {
 sem_wait(sem);
 print();
 sleep(1);
 sem_post(sem);
 printf("I'm finished,my tid is %d\n",pthread_self());
 }

 void print()
 {
 printf("I get it,my tid is %d\n",pthread_self());
 sem_getvalue(sem,&val);
 printf("Now the value have %d\n",val);
 }

leobegin2016
leobegin2016 回复欧阳嘉: 谢谢!
2 年多之前 回复
iamoyjj
欧阳嘉 if(argc != 2); 这行多了一个分号 去掉就好了 你可以自己试着调试,这样对你进步更有帮助
2 年多之前 回复
leobegin2016
leobegin2016 回复欧阳嘉: 可以给个联系方式么?以后还想请教请教你
2 年多之前 回复
iamoyjj
欧阳嘉 你可以自己调试一下 编译的时候加上 -g 用gdb 调试
2 年多之前 回复
leobegin2016
leobegin2016 回复欧阳嘉: 哦哦,谢谢!
2 年多之前 回复
iamoyjj
欧阳嘉 .sem test test 则才是两个参数吧
2 年多之前 回复
leobegin2016
leobegin2016 回复leobegin2016: 这不是2个参数么?
2 年多之前 回复
leobegin2016
leobegin2016 大神,想请教你下 我运行的时候输入 ./sem test 为什么运行不起呢?
2 年多之前 回复

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);
 }

leobegin2016
leobegin2016 我想用多线程啊,大神,你这个是我另外一个多进程的代码
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!