线程的创建
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
线程的创建
使用pthread_create函数。
- #include<pthread.h>
- int pthread_create (pthread_t *__restrict __newthread, // 新创建的线程ID
- __const pthread_attr_t *__restrict __attr,// 线程属性
- void *(*__start_routine) (void *), // 新创建的线程从start_routine开始执行
- void *__restrict __arg) // 执行函数的参数
线程的终止(三种方式)
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
", 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
", 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.
");
exit(-1);
}
err = pthread_create(&tid_2, NULL, sub, NULL);
if(err != 0)
{
printf("pthread_create error.
");
exit(-1);
}
err = pthread_join(tid_1, &tret);
if(err != 0)
{
printf("pthread_join error.
");
exit(-1);
}
printf("thread 1 exit code %d
", tret);
err = pthread_join(tid_2, &tret);
if(err != 0)
{
printf("pthread_join error.
");
exit(-1);
}
printf("thread 2 exit code %d
", tret);
return 0;
}
在Linux下编译,g++ -o thread1 thread1.C -lpthread
运行结果不是想象中的0,因为没有加上锁...