您的位置:首页 > 运维架构 > Linux

linux下多线程编程总结

2014-04-15 11:38 295 查看

1.线程的基本函数形式

pthread_xxx(),在linux环境下,通常函数的返回值有一个约定,即失败返回-1,成功返回0。而在线程的一系列函数中,成功返回0,而失败返回错误代码,所以在进行函数执行情况判断是,不能判断是否等于-1,而应该判断是否等于0。

创建线程

int pthread_create(pthread_t * thread , pthread_attr_t * attr, void *(*start_routine)(void *), void * arg);
thread:指向pthread_t类型的指针,pthread_t类型是用于描述新创建的线程的类型
attr:用于设置线程的属性,若不需要特殊的属性,则将其简单设为NULL
start_routine:线程函数的其实地址
arg:线程函数的参数

终止线程

void pthread_exit(void * retval);


retval:指向线程所要返回对象的指针,注意不能让retval指向局部的变量

线程同步

int pthread_join(pthread_t thread, void **thread_return)

thread:线程的描述符

thread_return:一个指向指针的指针,第二级指针指向的是线程所要返回的对象

以上函数的使用,基于必须include <pthread.h>头文件

2.用信号量来进行线程同步

信号量的创建

int sem_init(sem_t * sem, int pshared, unsigned int value);
sem:指向信号量描述符对象的指针

pshared:控制信号量的类型,0表示该信号量是当前进程的局部信号量,否则,这个信号量可以在多个进程中使用

value:信号量的初始值

信号量的控制

int sem_wait(sem_t *sem);
int sem_post(sem_t *sem);
sem_post作用是以原子操作的方式给信号量加1

sem_wait以原子操作的方式给信号量减1,但他会等到信号量非0的时候才会减,如果信号量值为零时,调用该方法,会等待。

信号量的销毁

int sem_destroy(sem_t * sem);
若清理的信号量正在被一些线程使用,就会收到一个错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: