linux 多线程

一.头文件

#include <pthread.h>

二.编译选项

-lpthread

三.结构体

pthread_t
pthread_attr_t
pthread_barrier_t
pthread_barrierattr_t
pthread_cond_t
pthread_condattr_t
pthread_key_t
pthread_mutex_t
pthread_mutexattr_t
pthread_once_t
pthread_rwlock_t
pthread_rwlockattr_t
pthread_spinlock_t

四.API函数

pthread_create() - thread creation //创建线程
	int pthread_create(pthread_t *restrict thread,const pthread_attr_t *restrict attr,void *(*start_routine)(void*), void *restrict arg);
pthread_detach() - detach a thread //解绑线程(子线程退出可以回收资源)
	int pthread_detach(pthread_t thread);
pthread_join() - wait for thread termination	//等待子进程结束 
	int pthread_join(pthread_t thread, void **value_ptr);
pthread_exit() - thread termination	//线程退出 
	void pthread_exit(void *value_ptr);
pthread_self() - get calling thread's ID //获取线程自身id
	pthread_t pthread_self(void); 
pthread_kill() - send a signal to a thread //发送结束信号给线程
	int pthread_kill(pthread_t thread, int sig);
pthread_equal() - compare thread IDs //比较线程id
	int pthread_equal(pthread_t t1, pthread_t t2);
pthread_cancel() - cancel execution of a thread //取消线程 
	int pthread_cancel(pthread_t thread);
pthread_cleanup_pop(), pthread_cleanup_push - establish cancelation handlers 
	void pthread_cleanup_pop(int execute);
	void pthread_cleanup_push(void (*routine)(void*), void *arg);

pthread_getcpuclockid() - access a thread CPU-time clock (ADVANCED REALTIME THREADS)
	int pthread_getcpuclockid(pthread_t thread_id, clockid_t *clock_id);
pthread_once() - dynamic package initialization 
	int pthread_once(pthread_once_t *once_control,void (*init_routine)(void));
pthread_atfork() - register fork handlers 
	int pthread_atfork(void (*prepare)(void), void (*parent)(void),void (*child)(void));	
pthread_getconcurrency() - get level of concurrency 
	int pthread_getconcurrency(void);
pthread_setconcurrency() - set level of concurrency 
	int pthread_setconcurrency(int new_level);
pthread_getschedparam() - dynamic thread scheduling parameters access (REALTIME THREADS) 
	int pthread_getschedparam(pthread_t thread, int *restrict policy,struct sched_param *restrict param);
pthread_setschedparam() - dynamic thread scheduling parameters access (REALTIME THREADS) 
	int pthread_setschedparam(pthread_t thread, int policy,const struct sched_param *param);
pthread_getspecific() - thread-specific data management 
	void *pthread_getspecific(pthread_key_t key);
pthread_setspecific() - thread-specific data management 
	int pthread_setspecific(pthread_key_t key, const void *value);
pthread_key_create() - thread-specific data key creation 
	int pthread_key_create(pthread_key_t *key, void (*destructor)(void*));
pthread_key_delete() - thread-specific data key deletion 
	int pthread_key_delete(pthread_key_t key);
pthread_setcancelstate() - set cancelability state 
	int pthread_setcancelstate(int state, int *oldstate);
pthread_setcanceltype() - set cancelability state 
	int pthread_setcanceltype(int type, int *oldtype);
pthread_testcancel() - set cancelability state 
	void pthread_testcancel(void);
pthread_setschedprio() - dynamic thread scheduling parameters access (REALTIME THREADS) 
	int pthread_setschedprio(pthread_t thread, int prio);
pthread_sigmask() - examine and change blocked signals 
	int pthread_sigmask(int how, const sigset_t *restrict set,sigset_t *restrict oset);
sigprocmask() - examine and change blocked signals 
	 int sigprocmask(int how, const sigset_t *restrict set,sigset_t *restrict oset);
	
pthread_attr_init() - initialize threads attributes object 
	int pthread_attr_init(pthread_attr_t *attr);
pthread_attr_destroy() - destroy threads attributes object 
	int pthread_attr_destroy(pthread_attr_t *attr);
pthread_attr_getinheritsched() - get inheritsched attribute (REALTIME THREADS) 
	int pthread_attr_getinheritsched(const pthread_attr_t *restrict attr,int *restrict inheritsched);
pthread_attr_setinheritsched() - set inheritsched attribute (REALTIME THREADS) 
	int pthread_attr_setinheritsched(pthread_attr_t *attr,int inheritsched);
pthread_attr_getschedparam() - get schedparam attribute 
	int pthread_attr_getschedparam(const pthread_attr_t *restrict attr,struct sched_param *restrict param);
pthread_attr_setschedparam() - set schedparam attribute 
	int pthread_attr_setschedparam(pthread_attr_t *restrict attr,const struct sched_param *restrict param);
pthread_attr_getschedpolicy() - get schedpolicy attribute (REALTIME THREADS) 
	int pthread_attr_getschedpolicy(const pthread_attr_t *restrict attr,int *restrict policy);
pthread_attr_setschedpolicy() - set schedpolicy attribute (REALTIME THREADS)
	int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);
pthread_attr_getscope() - get contentionscope attribute (REALTIME THREADS) 
	int pthread_attr_getscope(const pthread_attr_t *restrict attr,int *restrict contentionscope);
pthread_attr_setscope() - set contentionscope attribute (REALTIME THREADS) 
	int pthread_attr_setscope(pthread_attr_t *attr, int contentionscope);
pthread_attr_getstackaddr() - get stackaddr attribute 
	int pthread_attr_getstackaddr(const pthread_attr_t *restrict attr,void **restrict stackaddr);
pthread_attr_setstackaddr() - set stackaddr attribute
	int pthread_attr_setstackaddr(pthread_attr_t *attr, void *stackaddr);
pthread_attr_getstack() - set stack attributes 
	int pthread_attr_getstack(const pthread_attr_t *restrict attr,void **restrict stackaddr, size_t *restrict stacksize);
pthread_attr_setstack() - set stack attribute 
	int pthread_attr_setstack(pthread_attr_t *attr, void *stackaddr,size_t stacksize);
pthread_attr_getdetachstate() - get detachstate attribute 
	int pthread_attr_getdetachstate(const pthread_attr_t *attr,int *detachstate);
pthread_attr_setdetachstate() - set detachstate attribute 
	int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);
pthread_attr_getguardsize() - get thread guardsize attribute 
	int pthread_attr_getguardsize(const pthread_attr_t *restrict attr,size_t *restrict guardsize);
pthread_attr_setguardsize() - set thread guardsize attribute
	int pthread_attr_setguardsize(pthread_attr_t *attr,size_t guardsize);
pthread_attr_setstacksize() - set stacksize attribute 
	int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
pthread_attr_getstacksize() - get stacksize attribute
	int pthread_attr_getstacksize(const pthread_attr_t *restrict attr,size_t *restrict stacksize);

pthread_barrier_init() - initialize a barrier object (ADVANCED REALTIME THREADS) 
	int pthread_barrier_init(pthread_barrier_t *restrict barrier,const pthread_barrierattr_t *restrict attr, unsigned count);
pthread_barrier_destroy() - destroy a barrier object (ADVANCED REALTIME THREADS) 
	int pthread_barrier_destroy(pthread_barrier_t *barrier);
pthread_barrier_wait() - synchronize at a barrier (ADVANCED REALTIME THREADS) 
	int pthread_barrier_wait(pthread_barrier_t *barrier);
pthread_barrierattr_init() - initialize barrier attributes object (ADVANCED REALTIME THREADS) 
	int pthread_barrierattr_init(pthread_barrierattr_t *attr);
pthread_barrierattr_destroy() - destroy barrier attributes object (ADVANCED REALTIME THREADS) 
	int pthread_barrierattr_destroy(pthread_barrierattr_t *attr)
pthread_barrierattr_getpshared(), pthread_barrierattr_setpshared - get and set process-shared attribute of barrier attributes object (ADVANCED REALTIME THREADS) 
	int pthread_barrierattr_getpshared(const pthread_barrierattr_t *restrict attr, int *restrict pshared);
pthread_barrierattr_setpshared() - set process-shared attribute of barrier attributes object (ADVANCED REALTIME THREADS) 
	int pthread_barrierattr_setpshared(pthread_barrierattr_t *attr,int pshared);

pthread_condattr_init() - initialize condition variable attributes object 
	int pthread_condattr_init(pthread_condattr_t *attr);	
pthread_condattr_destroy() - destroy condition variable attributes object 
	int pthread_condattr_destroy(pthread_condattr_t *attr);
pthread_condattr_getclock() - get the clock selection condition variable attribute (ADVANCED REALTIME) 
	int pthread_condattr_getclock(const pthread_condattr_t *restrict attr,clockid_t *restrict clock_id);
pthread_condattr_setclock() - set the clock selection condition variable attribute 
	int pthread_condattr_setclock(pthread_condattr_t *attr,clockid_t clock_id);
pthread_condattr_getpshared() - get the process-shared condition variable attributes 
	int pthread_condattr_getpshared(const pthread_condattr_t *restrict attr,int *restrict pshared);
pthread_condattr_setpshared() - set the process-shared condition variable attributes
	int pthread_condattr_setpshared(pthread_condattr_t *attr,int pshared);
pthread_cond_init() - initialize condition variables 
	int pthread_cond_init(pthread_cond_t *restrict cond,const pthread_condattr_t *restrict attr);
pthread_cond_destroy() - destroy condition variables 
	int pthread_cond_destroy(pthread_cond_t *cond);
pthread_cond_broadcast() - broadcast a condition 
	int pthread_cond_broadcast(pthread_cond_t *cond);
pthread_cond_signal() - signal a condition 
	int pthread_cond_signal(pthread_cond_t *cond);
pthread_cond_timedwait() - wait on a condition 
	int pthread_cond_timedwait(pthread_cond_t *restrict cond,pthread_mutex_t *restrict mutex,const struct timespec *restrict abstime);
pthread_cond_wait() - wait on a condition 
	int pthread_cond_wait(pthread_cond_t *restrict cond,pthread_mutex_t *restrict mutex); 
	 
pthread_mutexattr_init() - initialize mutex attributes object 
	int pthread_mutexattr_init(pthread_mutexattr_t *attr);
pthread_mutexattr_destroy() - destroy mutex attributes object 
	int pthread_mutexattr_destroy(pthread_mutexattr_t *attr);
pthread_mutexattr_getprioceiling() - get prioceiling attribute of mutex attributes object (REALTIME THREADS)
	int pthread_mutexattr_getprioceiling(const pthread_mutexattr_t *restrict attr, int *restrict prioceiling);
pthread_mutexattr_setprioceiling() - set prioceiling attribute of mutex attributes object (REALTIME THREADS) 
	int pthread_mutexattr_setprioceiling(pthread_mutexattr_t *attr,int prioceiling);
pthread_mutexattr_getprotocol() - get and set protocol attribute of mutex attributes object (REALTIME THREADS) 
	int pthread_mutexattr_getprotocol(const pthread_mutexattr_t *restrict attr, int *restrict protocol);
pthread_mutexattr_setprotocol() - set protocol attribute of mutex attributes object (REALTIME THREADS) 
	int pthread_mutexattr_setprotocol(pthread_mutexattr_t *attr,int protocol);
pthread_mutexattr_getpshared() - get process-shared attribute 
	int pthread_mutexattr_getpshared(const pthread_mutexattr_t *restrict attr, int *restrict pshared);
pthread_mutexattr_setpshared() - set process-shared attribute 
	int pthread_mutexattr_setpshared(pthread_mutexattr_t *attr,int pshared); 
pthread_mutexattr_gettype() - get a mutex type attribute 
	int pthread_mutexattr_gettype(const pthread_mutexattr_t *restrict attr,int *restrict type);
pthread_mutexattr_settype() - set a mutex type attribute 
	int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type);
pthread_mutex_init() - initialize a mutex 
	int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);
pthread_mutex_destroy() - destroy a mutex 
	int pthread_mutex_destroy(pthread_mutex_t *mutex);
pthread_mutex_getprioceiling() - get the priority ceiling of a mutex (REALTIME THREADS) 
	int pthread_mutex_getprioceiling(const pthread_mutex_t *restrict mutex,int *restrict prioceiling);
pthread_mutex_setprioceiling() - change the priority ceiling of a mutex (REALTIME THREADS) 
	int pthread_mutex_setprioceiling(pthread_mutex_t *restrict mutex,int prioceiling, int *restrict old_ceiling);
pthread_mutex_lock() - lock a mutex 
	int pthread_mutex_lock(pthread_mutex_t *mutex);
pthread_mutex_trylock() - lock a mutex 
	int pthread_mutex_trylock(pthread_mutex_t *mutex);
pthread_mutex_timedlock() - lock a mutex (ADVANCED REALTIME) 
	int pthread_mutex_timedlock(pthread_mutex_t *restrict mutex,const struct timespec *restrict abs_timeout);
pthread_mutex_unlock() - unlock a mutex 
	int pthread_mutex_unlock(pthread_mutex_t *mutex);
	
pthread_rwlockattr_init() - initialize read-write lock attributes object 
	int pthread_rwlockattr_init(pthread_rwlockattr_t *attr); 	
pthread_rwlockattr_destroy() - destroy read-write lock attributes object 
	int pthread_rwlockattr_destroy(pthread_rwlockattr_t *attr);
pthread_rwlockattr_getpshared() - get process-shared attribute of read-write lock attributes object 
	int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *restrict attr, int *restrict pshared);
pthread_rwlockattr_setpshared() - set process-shared attribute of read-write lock attributes object 
	int pthread_rwlockattr_setpshared(pthread_rwlockattr_t *attr,int pshared);	
pthread_rwlock_init() - initialize a read-write lock object
	int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock,const pthread_rwlockattr_t *restrict attr);	
pthread_rwlock_destroy() - destroy a read-write lock object 
	int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);
pthread_rwlock_rdlock() - lock a read-write lock object for reading
	int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
pthread_rwlock_wrlock() - lock a read-write lock object for writing 
	int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
pthread_rwlock_tryrdlock() - lock a read-write lock object for reading 
	int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);
pthread_rwlock_trywrlock() - lock a read-write lock object for writing 
	int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);
pthread_rwlock_timedrdlock() - lock a read-write lock for reading 
	int pthread_rwlock_timedrdlock(pthread_rwlock_t *restrict rwlock,const struct timespec *restrict abs_timeout);
pthread_rwlock_timedwrlock() - lock a read-write lock for writing 
	int pthread_rwlock_timedwrlock(pthread_rwlock_t *restrict rwlock,const struct timespec *restrict abs_timeout);
pthread_rwlock_unlock() - unlock a read-write lock object 
	int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);
	 
pthread_spin_init() - initialize a spin lock object (ADVANCED REALTIME THREADS) 
	int pthread_spin_init(pthread_spinlock_t *lock, int pshared);
pthread_spin_destroy() - destroy a spin lock object (ADVANCED REALTIME THREADS) 
	int pthread_spin_destroy(pthread_spinlock_t *lock);
pthread_spin_lock() - lock a spin lock object (ADVANCED REALTIME THREADS) 
	int pthread_spin_lock(pthread_spinlock_t *lock);
pthread_spin_trylock() - lock a spin lock object (ADVANCED REALTIME THREADS) 
	int pthread_spin_trylock(pthread_spinlock_t *lock);
pthread_spin_unlock() - unlock a spin lock object (ADVANCED REALTIME THREADS) 
	int pthread_spin_unlock(pthread_spinlock_t *lock);

五.例子

一个比较综合的例子

#include <stdio.h>
#include <pthread.h>
#include <sys/time.h>
#include <stdlib.h>

pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;

static void* thread(void* prm)
{
	struct timeval now;
	struct timespec timeout;

	char *arg=(char*)prm;

	printf("input :%s\n",arg);	//打印传递的参数

	pthread_mutex_lock(&mut);	//加锁线程互斥锁

	gettimeofday(&now,NULL);
	timeout.tv_sec=now.tv_sec + 5;
	timeout.tv_nsec=now.tv_sec * 1000;
	pthread_cond_timedwait(&cond, &mut, &timeout);	//线程条件等待5s

	pthread_mutex_unlock(&mut);	//解锁线程互斥锁

	printf("This is Child pthread\n");
	sleep(5);
	pthread_detach(pthread_self());	//获取线程自身id,接绑线程,结束可释放资源
}

int main(int argc,char **argv)
{
	pthread_t id;
	int ret;
	char *arg=(char *)malloc(255);
	sprintf(arg,"no input argv!\n");
	if(argc==2){
		sprintf(arg,"%s",argv[1]);
	}
	ret=pthread_create(&id,NULL,(void *) thread,(void*)arg);	//创建线程,传递参数
	if(ret!=0){
		printf ("Create pthread error!\n");
		exit (1);
	}

	printf("This is main process\n");


	pthread_join(id,NULL);	//等待子线程结束
	printf("Child thread done!\n");
	free(arg);
	return (0);
}


 

 

 

 

你可能感兴趣的:(linux 多线程)