原创
线程概述
2009-5-27 20:55
2210
6
6
分类:
软件与OS
https://static.assets-stash.eet-china.com/album/old-resources/2009/5/24/2978ae99-0651-487d-a699-7038076bab61.rar
pthread接口
何时使用pthread
这4个例子能够普遍地描述成:检查程序中潜在的并行性,也就是说找出能够同时执行的任务。
首先使用pthread_create函数创建一个新的线程:
#include <pthread.h>
int pthread_create(pthread_t *thread, pthread_attr_t *attr,
void (start_routine)(void *)
void *arg);
pthread_exit函数使用pthread_cleanup_push调用任何用于该进程的清除函数,然后终止当前线程的执行,返回retval。retval可以由父线程或其他线程通过pthread_join来检索。一个线程也可以简单地通过从其初始化函数返回来终止。
#include <pthread.h>
void pthread_exit(void *retval);
pthread_join函数用于挂起当前线程,直至th指定的线程终止运行为止。
#include <pthread.h>
int pthread_join(pthread_t th, void **thread_return);
int pthread_detach(pthread_t th);
pthread_atfork函数登记了3个处理函数,它们在创建一个新线程的某些时候被调用。
#include <pthread.h>
int pthread_atfork( void (*prepare)(void),
void (*parent)(void),
void (*child)(void));
取消线程
pthread_cancel函数允许当前线程取消thread指定的另一个线程
#include <pthread.h>
int pthread_cancel(pthread_t thread);
int pthread_setcancelstate(int state, int *oldstate);
int pthread_setcanceltype(int type, int *oldstate);
void pthread_testcancel(void);
pthread cleanup 宏
宏pthread_cleanup_push登记了一个处理函数rountine,当调用pthread_exit终止线程或者线程允许取消请求而同时又到达了一个取消点时,就用arg指定的空指针参数调用这个处理函数
#include <pthread.h>
void pthread_cleanup_push(void (*routine), (void *), void *arg);
void pthread_cleanup_pop(int execute);
void pthread_cleanup_push_defer_np(void (routine)(void *), void *arg)
void pthread_cleanup_pop_restore_np(int execute);
互斥(mutex)是相互排斥(mutual exclusion)的缩写,它是一种锁或者是信号灯。和信号灯以及文件锁类似,互斥也用来保护由多个线程共享的数据和结构不被同时修改。
#include <pthread.h>
int pthread_mutex_init(pthread_mutex_t *mutex,
const pthread_mutexattr_t mutexattr);
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
int pthread_mutex_destroy(pthread_mutex_t *mutex);
文章评论(0条评论)
登录后参与讨论