标签:
线程的创建
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
1.线程从执行函数返回,返回值是线程的退出码
2.线程被同一进程的其他线程取消
3.调用pthread_exit()函数退出。这里不是调用exit,因为线程调用exit函数,会导致线程所在的进程退出。
#include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> #include <string.h> int num = 0; void *add(void *arg) { int i = 0, tmp; for(; i<500; i++) { tmp = num + i; num = tmp; printf("add+1, result is %d\n", num); } return 0; } void *sub(void *arg) { int i = 0, tmp; for(; i<500; i++) { tmp = num - 1; num = tmp; printf("sub-1, result is %d\n", num); } return 0; } int main() { pthread_t tid_1, tid_2; int err; void *tret; // 创建线程 err = pthread_create(&tid_1, NULL, add, NULL); if(err != 0) { printf("pthread_create error.\n"); exit(-1); } err = pthread_create(&tid_2, NULL, sub, NULL); if(err != 0) { printf("pthread_create error.\n"); exit(-1); } err = pthread_join(tid_1, &tret); if(err != 0) { printf("pthread_join error.\n"); exit(-1); } printf("thread 1 exit code %d\n", tret); err = pthread_join(tid_2, &tret); if(err != 0) { printf("pthread_join error.\n"); exit(-1); } printf("thread 2 exit code %d\n", tret); return 0; }
在Linux下编译,g++ -o thread1 thread1.C -lpthread
运行结果不是想象中的0,因为没有加上锁...
标签:
原文地址:http://www.cnblogs.com/eternal1025/p/4432690.html