int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg)
首先要知道的是这是线程的创建,进程创建是fork()
第一个参数是你所创建的线程对象
第二个是线程的属性
-
typedef struct
-
{
-
int detachstate; 线程的分离状态
-
int schedpolicy; 线程调度策略
-
struct sched_param schedparam; 线程的调度参数
-
int inheritsched; 线程的继承性
-
int scope; 线程的作用域
-
size_t guardsize; 线程栈末尾的警戒缓冲区大小
-
int stackaddr_set;
-
void * stackaddr; 线程栈的位置
-
size_t stacksize; 线程栈的大小
-
}pthread_attr_t;
第三个是线程所运行的函数
第四个是运行函数的实参(一般指向一个有多个成员的结构体)
pthread_mutex_t 互斥的初始化有两种方式1.静态初始化pthread_mutex_t mutex_x=PTHREAD_MUTEX_INITIALIZER;
2.动态初始化:使用init函数
区别是静态是在栈中,函数用完就消失,动态在堆中不会消失
锁的方式也有两种:int pthread_mutex_trylock(pthread_mutex_t* mutex);//非阻塞式加锁
int pthread_mutex_lock(pthread_mutex_t* mutex)//阻塞式加锁
如果一个线程既想获得锁,又不想挂起等待,可以调用pthread_mutex_trylock,如果Mutex已经被 另一个线程获得,这个函数会失败返回EBUSY,而不会使线程挂起等待。