标签:
线程的创建
线程是进程的一个实体,是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