多线程编程教材
A 线程标识
从概念上讲,线程存在于进程中,比进程的粒度更小。当启动一个程序后,Linux 会创建一
个进程并且再创建一个线程。线程可以再次创建一个线程(称为子线程)。与进程不同,子
进程可以修改自身内存变量或者关闭文件描述符,从而不会影响父进程;子线程会共享内存
空间,同样的文件描述符以及其他资源。但是子进程如果关闭了文件描述符或者改变了内存
空间中变量的值,别的进程也会受到干扰。
1 个数据类型:
pthread_t 线程号(和进程号有区别 pid_t)
注意 pthread_t 一般情况下不当作整数,但是事实上这个版本的 gcc 中仍然是 32 位无符号整
数。
注意:
gcc foo.c –o foo –lpthread
B 函数
3 个重要函数
函数 1:
int pthread_create(pthread_t * thread,
const pthread_attr_t * attr,
void *(start_routine)(void),
void * arg);
参数含义:第 1 参数是线程标识
第 2 个参数是线程的属性变量,一般都是默认的,用 NULL 表示。
第 3 个参数是 函数指针类型的 start_routine,代表线程要执行的代码
第 4 个参数是线程参数指针 arg,没有参数用 NULL
返回值: 成功则返回 0 不成功返回错误代码
(注意 restrict 是一个 c99 中的一个关键字,表示除第一次外必须从寄存器中取值,看代码
时候可以忽略不看)
举例子:
pthread_create(&ntid,NULL,run,NULL)
其中 pthread_t ntid;
Void * run(void *arg)
函数 2: pthread_t pthread_self(void); 类似的是 getpid() 取得线程标识
函数 3 int pthread_equal(pthread_t t1, pthread_t t2) 判断是否相同的 pthread_t
C 线程的启动
程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>