线程
轻量级的进程,最小的执行单元。
进程:独立的PCB块,内存空间地址独立
线程:独立的PCB块,没有独立的内存空间地址
寄存器和栈的集合。
函数
pthread_t pthread_self(void);//返回线程ID
类似于进程中的getpid()
创建线程函数
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void (start_routine) (void *), void *arg);
说明:
pthread_t *thread 线程的ID
const pthread_attr_t *attr线程的属性 通常设置为NULL
void (start_routine) (void *) 线程的回调函数
void *arg回调函数的参数
线程共享全局变量。
#include <pthread.h>
#include <unistd.h>
#include <stdio.h>
void exit(int);
void sys_err(const char *str){
perror(str);
exit(1);
}
int globl_a = 100;
void* func(void *a){
//int temp = *((int*)a);
int temp = (int)a;
globl_a=200;
printf("*******a=%d******\n",globl_a);
//pthread_t pid_ret = pthread_self();
//printf("pthreadID = %u:getpid =%d\n",pid_ret,getpid());
printf("*******subthread********\n");
}
int main(){
pthread_t pid_ret;
int i=0;
//for(;i<5;i++){
int ret = pthread_create(&pid_ret, NULL,func, (void*)i);
if(-1 == ret){
sys_err("pthread_create err");
}
//printf("pthreadID = %u:getpid =%d\n",pid_ret,getpid());
//}
sleep(2);
printf("a=%d\n",globl_a);
return 0;
}