首页 > 代码库 > Linux 进程与线程六
Linux 进程与线程六
//线程间的通信 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <unistd.h> #include <pthread.h> /*线程1与控制线程通信方法1--全局变量*/ int g_num=10; void *thread_run(void *arg) { //线程1被分离了,但最好不要使用pthread_join()函数接受,多线程下报错内存溢出 pthread_detach(pthread_self()); int *p=(int *)arg; (*p)++; g_num=12; /*线程1与控制线程通信方法2--pthread_exit()函数的参数*/ //pthread_exit(p); //执行pthread_exit()函数后,线程会直接退出 printf("线程1退出了!\n"); /*线程1与控制线程通信方法3--线程中return*/ return p; } int main(int arg,char *args[]) { /* * 每个线程都拥有各自的栈内存,但是彼此之间的栈内存是可以互相访问, * 比如在控制线程定义的变量,可以在线程1中访问 * 线程1中定义变量可能无法在控制线程访问,因为无法确定变量是否因为线程执行完毕被释放了 * */ int index=0; pthread_t thr1; if(pthread_create(&thr1,NULL,thread_run,&index)!=0) { printf("pthread_create() failed !\n"); return -1; } //等待线程1 int *p=NULL; pthread_join(thr1,(void **)&p); printf("线程1的返回值%d\n",*p); printf("控制线程的index=%d\n",index); printf("g_num=%d\n",g_num); return 0; }
//线程的并行执行 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <unistd.h> #include <pthread.h> void *thread_run(void *arg) { //pthread_detach(pthread_self()); if (arg != NULL) { int *p = (int *) arg; int i = 0; for (i = 0; i < *p; i++) { printf("这是线程%d的第%d圈!\n", (int) pthread_self(), i); sleep(1); } } return NULL; } int main(int arg, char *args[]) { int i = 0; int num1 = 10; int num2 = 10; printf("请输入创建线程的个数:\n"); scanf("%d", &num1); printf("请输入每个线程的圈数:\n"); scanf("%d", &num2); pthread_t thrs[200]; /* * 多线程是并行运行的 * */ for (i = 0; i < num1; i++) { if (pthread_create(&thrs[i], NULL, thread_run, &num2) != 0) { printf("pthread_create() failed !\n"); return -1; } } for (i = 0; i < num1; i++) { /*如果没有pthread_join(),那么控制线程不会等待子线程,会直接退出*/ pthread_join(thrs[i],NULL); } return 0; }
Linux 进程与线程六
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。