线程小记

https://www.ibm.com/developerworks/cn/linux/thread/posix_threadapi/part1/

#include<pthread.h>

pthread_t 线程标识符

pthread_create用来创建一个线程

int pthread_create(pthread_t *tid,  //指向线程标识符的指针

    const pthread_attr *attr,         //用来设置线程属性

    void* (*start_routine)(void*), //线程运行函数的起始地址

void *arg) //运行函数的参数

当创建线程成功时,函数返回0,若不为0 则说明创建线程失败,常见的错误返回代码为EAGAIN 和EINVAL。

前者表示系统限制创建新的线程,例如线程数目过多了;

后者表示第二个参数代表的线程属性值非法。

创建线程成功后,新创建的线程则运行参数三和参数四确定的函数,原来的线程则继续运行下一行代码。

pthread_join用来等待指定的线程结束

int pthread_join(pthread_t th,  //被等待的线程标识符

void **__thread_return); //用户定义指针,用来存储被等待线程的返回值

这个函数是一个线程阻塞的函数,调用它的函数将一直等待到被等
待的线程结束为止,当函数返回时,被等待线程的资源被收回。


pthread_exit线程主动退出

void pthread_exit(void *retval_ptr);

唯一的参数是函数的返回代码,只要pthread_join 中的第二个参数thread_return 不
是NULL,这个值将被传递给thread_return。最后要说明的是,一个线程不能被多个线程等
待,否则第一个接收到信号的线程成功返回,其余调用pthread_join 的线程则返回错误代
码ESRCH。


pthread_cancel撤销线程

int pthread_cancel(pthread_t id,void *retval_ptr);


互斥锁用来保证一段时间内只有一个线程在执行一段代码。

  一 pthread_mutex_init

  函数pthread_mutex_init用来生成一个互斥锁。NULL参数表明使用默认属性。

如果需要声明特定属性的互斥锁,须调用

函数 pthread_mutexattr_init、//设置属性pshared,它有两个取值, PTHREAD_PROCESS_PRIVATE(用来不同进程中的线程同步。默认)

    和PTHREAD_PROCESS_SHARED(用于同步本进程的不同线程)

函数pthread_mutexattr_setpshared、//

函数 pthread_mutexattr_settype、//后者用来设置互斥锁类型,可选的类型有PTHREAD_MUTEX_NORMAL、PTHREAD_MUTEX_ERRORCHECK、 PTHREAD_MUTEX_RECURSIVE和PTHREAD _MUTEX_DEFAULT.

它们分别定义了不同的上所、解锁机制。

一般情况下,选用最后一个默认属性。用来设置互斥锁属性。

  二 pthread_mutex_lock 、pthread_mutex_unlock 、pthread_delay_np

  pthread_mutex_lock声明开始用互斥锁上锁,此后的代码直至调用pthread_mutex_unlock为止,均被上锁,即同一时间只能被一个线程调用执行。当一个线程执行到pthread_mutex_lock处时,如果该锁此时被另一个线程使用,那此线程被阻塞,即程序将等待到另一个线程释放此互斥锁。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值