创建线程
int pthread_create(pthread_t *thread,pthread_attr_t *attr,void *(*start_routine)(void *),void *arg);
return 0 on success,an error number if anything goes wrong
结束线程
void pthread_exit(void * retval);
等待线程结束,线程版的wait
int pthread_join(pthread_t th,void * * thread_return);
取消线程
int pthread_cancel(pthread_t thread);
int pthread_setcancelstate(int state,int * oldstate);
unix下函数经常有个old*参数用来保存之前的值用来retrieve
state可以是PTHREAD_CANCEL_ENALE 或者PTHREAD_CANCEL_DISABLE
int pthread_setcanceltype(int type,int * oldtype);
还可以用上面的函数来设置cancel,如果是PTHREAD_CANCEL_ASYNCHRONOUS,那么cancel立即执行
如果是PTHREAD_CANCEL_DEFERRED那么等待thread从pthread_join等cancel point函数后才cancel
创建binary semaphore
int sem_init(set_t *sem,int pshared,unsigned int value);
Linux下面pshared通常为0,表示只与同一进程中的线程共享
PV原子操作
int sem_wait(set_t * sem);
int sem_post(set_t * sem);
int sem_trywait(set_t * sem);
int sem_destory(sem_t * sem);
创建Mutex
int pthread_mutex_init(pthread_mutex_t * mutex,const pthread_muteattr_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);
pthread多线程的函数一般return 0 on success,erro number if fail
线程属性 Thread Attributes
初始化Thread Attributes
int pthread_attr_init(pthread_attr_t * attr);
int pthread_attr_destroy(pthead_attr_t * attr);
下面的四个函数比较常用
int pthread_attr_setdetachstate(pthread_attr_t * attr,int detachstate);
int pthread_attr_getdetachstate(pthread_attr_t * attr,int * detachstate);
上面两个函数detachstate avoid the need for threads to rejoin,the value may be PTHREAD_CREATE_JOINABLE and PTHREAD_CREATE_DETACHED
int pthread_attr_setschedpolicy(pthread_attr_t * attr,int policy);
int pthread_attr_getschedpolicy(const pthread_attr_t * attr,int * policy);
上面两个函数controls how threads are scheduled,the value may be SCHED_OTHER(default),SCHED_RR,SCHED_FIFO