linux线程相关小结

typedef unsigned long int pthread_t;
int pthread_create(pthread_t *thread, pthread_attr_t *attr, void*(func)(void*), void *arg);
attr为NULL时使用默认属性。
线程的退出方式:
1.执行完成后隐式退出;
2.由线程本身显式调用pthread_exit函数退出;
  pthread_exit(void *retval);
3.被其他线程调用pthread_cancel(pthread_t thread);
如果一个线程要等待另一个线程的终止,可以使用pthread_join函数:
  pthread_join(pthread_t thread, void **threadreturn);
Linux下的C语言编程有多种线程同步机制,最典型的是条件变量(condition variable)。pthread_cond_init用来创建一个条件变量,其函数原型为:

int pthread_cond_init (pthread_cond_t *cond, const pthread_condattr_t *attr);
int pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex);
pthread_cond_wait()使用时的一般方式是:
   pthread_mutex_lock(&var.mutex);
   while 条件为假
        pthread_cond_wait(&var.cond, &var.mutex);
	修改条件
	pthread_mutex_unlock(&var.mutex);
即,pthread_cond_wait一般与互斥锁结对使用。pthread_cond_wait()先解锁以便锁能被其他线程使用,再阻塞,返回时再上锁。
int pthread_cond_timewait(pthread_cond_t *cptr, pthread_mutex_t *mptr, const
struct timespec * abstime);
pthread_cond_timewait()允许线程就阻塞时间设置一个限制值。其中,
struct timespec
{
	time_t tv_sec;
	long tv_nsec;
};
int pthread_cond_broadcast(pthread_cond_t *cptr);
int pthread_cond_signal(pthread_cond_t *cptr);
通常pthread_cond_signal只唤醒等待在相应条件变量上的一个线程,而pthread_cond_broadcast()则唤醒阻塞在相应条件变量上的所有线程。
互斥锁上锁和解锁:
int pthread_mutex_lock(pthread_mutex_t *mptr);
int pthread_mutex_trylock(pthread_mutex_t *mptr);
int pthread_mutex_unlock(pthread_mutex_t *mptr);
如果尝试给一个已由另外某个线程锁住的互斥锁上锁,那么pthread_mutex_lock将阻塞到该互斥锁解锁为止。而pthread_mutex_trylock()则为对应的非阻塞函数,如果该互斥锁已经上锁,则返回EBUSY错误。
如果互斥锁是静态分配的,则可以使用PTHREAD_MUTEX_INITIALIZER初始化。如果是动态分配的(如malloc()),则可以使用pthread_mutex_init()函数初始化。


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值