Linux线程

宏_REENTRANT的作用:

1)它会对部分函数重新定义他们的可安全重入的版本,这些函数的名字一般不会发生改变,只是会在函数名后面添加-r字符串。例如,函数名gethostbyname将变为gethostbyname_r。

2)stdio.h中原来以宏的形式实现的一些函数将变成可安全重入的函数。

3)在errno.h中定义的变量errno现在将成为一个函数调用,它能够以以多线程的方式获取正确的errno的值。


线程创建函数

#include<pthread.h>

int  pthread_create(pthread_t* thread,pthread_attr_t *attr, void * (*start_func)(void *),void * arg);

函数创建成功的时候,会把线程标示符传入 thread,第二个参数指定线程的属性一般不需要去修改,第三个参数是线程的启动函数,第四个参数是线程启动函数的参数。

函数调用成果则返回0,失败返回错误码。


线程终止函数

#include<pthread.h>

void pthread_exit(void *)

该函数会终止调用它的线程并返回一个指向对象的指针。


线程收集函数

#include<pthread.h>

int pthread_join(pthread_t th,void ** thread_return);

第一个参数将要等待的线程,线程通过pthread_create返回的标示符即第一个参数来表示,第二个参数是一个指针,它指向另一个指针,而后者指向线程的返回值,函数调用成功返回0失败则返回错误码。

线程同步:

1 信号量

信号量的创建

#include<semaphore.h>

int sem_init(sem_t* sem,int pshared, unsigned int  value)

这个函数初始化由sem指向的信号量对象,设置它的共享选项,并给一个初始的整数值,pshared参数控制信号量的类型,如果其值为0,表示这个信号量是当前进程的局部信号量,否则,这个信号量可以在多个进程之间共享。


接下来两个函数控制信号量的值

#include<semaphore.h>

int sem_wait(sem_t* sem);

int sem_post(sem_t * sem);


sem_post对信号量进行原子操作加1;

sem_wait对信号量减去1,只有当信号量是正数的时候才进行相减,然后进行执行,否则等待信号量变为正数。


信号量的销毁函数

#include<semaphore.h>

int sem_destroy(semt_t* sem);

释放信号量的资源,如果信号量被一些线程等待,则返回错误。

上面这些函数成功都返回0,失败返回相应的错误码


互斥量

#include<pthread.h>

int pthread_init(pthread_mutex_t *mutex, const pthread_mutexattrt_t  *mutexattr);//互斥量的创建

int pthread_mutex_lock(pthread_mutext_t *mutex);

int pthread_mutex_unlock(pthread_mutex_t *mutex);

int pthread_mutex_destory(pthread_mutex_t* mutex);

成功返回0,失败返回错误码;

互斥量的默认属性是fast,当该线程已经加锁过一个互斥量的时候,在进行加锁会阻塞,程序会进入死锁的状态,可以修改互斥量的属性,再构造的时候进行检测或者递归加锁,然后递归解锁。

线程的取消

#include<pthread.h>

int pthread_cancel(pthread_t thread);

线程收到取消的信号后,根据自己的属性进行处理,可以忽略,默认是取消。

设置线程的取消状态

#include<pthread.h>

int pthread_setcancelstate(int state, int*oldstate);

第一个参数PTHREAD_CANCEL_ENABLE接收取消;PTHREAD_CANCEL_DISABLE忽略取消。

设置取消类型

#include<pthread.h>

int pthread_setcanceltype(int type,int *oldstate);

type的两种取值:PTHREAD_CANCEL_ASYNCHRONOUS立即取消,另一种PTHREAD_CANCEL_DEFERRED等待线程执行到取消点。


默认的行为是PTHREAD_CANCEL_ENABLE,类型PTHREAD_CANCEL_DEFERRED。














  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值