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()函数初始化。
linux线程相关小结
最新推荐文章于 2024-01-23 16:47:14 发布
1116

被折叠的 条评论
为什么被折叠?



