线程

来源:互联网 发布:.bat java 编辑:程序博客网 时间:2024/05/30 23:02

#include<stdio.h>#include<unistd.h>#include<pthread.h>void * pthread_func(void * arg){int * parameter=(int *)arg;printf("Thread parameter is %d\n", *parameter);return NULL;}int main(int argc, char * argv[]){int ret;int arg=5;pthread_t tid;/*创建线程,并传递参数*/ret=pthread_create(&tid, NULL, pthread_func, &arg);if(ret!=0){printf("pthread_create error!\n");return 0;}sleep(1);return 0;}

#include<stdio.h>#include<unistd.h>#include<pthread.h>void * pthread_func(void * arg){/*副线程的进程ID、线程ID*/printf("Sub thread: pid=%d, tid=%u\n", (int)getpid(), (unsigned int)pthread_self());return NULL;}int main(int argc, char * argv[]){/*主线程的进程ID、线程ID*/printf("Main thread: pid=%d, tid=%u\n", (int)getpid(), (unsigned int)pthread_self());int ret;/*创建线程*/pthread_t tid;ret=pthread_create(&tid, NULL, pthread_func, NULL);if(ret!=0){printf("pthread_create error!\n");return 0;}sleep(1);return 0;}

#include<stdio.h>#include<unistd.h>#include<pthread.h>char buff[20]="abcde";void * pthread_func(void * arg){/*线程退出,并且设置返回数据*//*代码执行到pthread_exit就已经结束了,并不会执行到return*/pthread_exit((void *)buff);return NULL;/*效果和上面的相同,退出并设置返回数据*//*return (void *)buff;*/}int main(int argc, char * argv[]){int ret;int arg=5;pthread_t tid;/*创建线程*/ret=pthread_create(&tid, NULL, pthread_func, NULL);if(ret!=0){printf("pthread_create error!\n");return 0;}sleep(1);/*等待线程退出,并且读取返回数据存储到变量temp中*/void * temp;pthread_join(tid, &temp);printf("Sub thread exit with value: %s\n", (char *)temp);return 0;}

#include<stdio.h>#include<unistd.h>#include<pthread.h>void cleanup(void * arg){printf("%s\n", (char*)arg);}void * pthread1_func(void * arg){/*将清理函数压入到栈中*/pthread_cleanup_push(cleanup, "thread1 first cleanup");pthread_cleanup_push(cleanup, "thread1 second cleanup");/*调用return并不会执行清理函数*/if(!arg)return NULL;pthread_cleanup_pop(1);pthread_cleanup_pop(1);return NULL;}void * pthread2_func(void * arg){/*将清理函数压入到栈中*/pthread_cleanup_push(cleanup, "thread2 first cleanup");pthread_cleanup_push(cleanup, "thread2 second cleanup");/*调用清理函数,会将栈中的所有清理函数全部弹出来并按照后进先出的顺序执行*//*if(!arg)pthread_exit(NULL);*//*程序根本执行不到这里来*/pthread_cleanup_pop(1);pthread_cleanup_pop(1);return NULL;}int main(int argc, char * argv[]){int ret;pthread_t tid1;ret=pthread_create(&tid1, NULL, pthread1_func, NULL);if(ret!=0){printf("pthread_create error!\n");return 0;}pthread_t tid2;ret=pthread_create(&tid2, NULL, pthread2_func, NULL);if(ret!=0){printf("pthread_create error!\n");return 0;}sleep(1);return 0;}





原创粉丝点击