`
装甲车2号
  • 浏览: 1758 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
社区版块
存档分类
最新评论

linux下多线程编程总结

阅读更多
1. 多线程管理
异步:表明事情相互独立地发生,除非有强加的依赖性。
并发:让实际可能串行发生的事情好像同时发生一样,但并发并不代表操作同时进行。
并行:要求程序能够同时处理多个操作。
线程安全:是指代码能够被多个线程调用而不会产生灾难性的结果。可以利用互斥量、条件变量,线程私有数据,实现线程的安全。
同步:阻止同步发生,让线程协调完成工作的机制。
调度:决定在某个给定的时刻执行哪个环境,并在不同的环境切换。
系统调度功能:可以让线程执行直到它自愿让出CUP给其他线程为止,也可以提供时间片,使每个线程被迫周期性的让出CUP。
线程系统的三个基本要素:执行环境,调度和同步。
在linux系统下,启动一个新的进程必须给他分配独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种昂贵的工作方式。而运行一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据。
线程的属性:主要包括是否绑定、是否分离、堆栈大小、优先级。
轻进程:可以理解为内核线程,它位于用户层和系统层之间,系统对线程资源的分配、对线程的控制是通过轻进程来实现的。
当进程结束时,所有的线程、状态和它们的工作结果都会简单的蒸发-没有理由要清理什么
一个没有被分离的线程终止时会保留其虚拟内存,包括它们的堆栈和系统资源。
互斥量在使用前必须初始化,而且只能初始化一次。
线程变成的几种模型:1.流水线:每个线程反复在数据系列集上执行同一种工作,并把操作结果传递给下一步的其他线程。2.工作组:每个线程在自己的数据上执行操作,也可以执行不同的操作,但是他们一定独立的执行。3.客户端/服务器:
//所有数据全部都是指针
Pthread_t(只有创建时指针)
Int pthread_create(pthread_t *id,pthread_attr_t *attr,void *(*fun)(void *),void *arg)、 int pthread_join(pthread_t id,void **value)、
int pthread_exit(void *value)
Pthread_attr_t(全部都是指针)
pthread_attr_init(pthread_attr_t *attr)、
Pthread_attt_setscopt(pthread_attr_t *attr, PTHREAD_SCOPE_SYSTEM)//process
pthread_attr_setdetachstate(pthread_attr_t *attr,pthread_create_joinable)//detached
Pthread_key_t (只有创建时指针)
Pthread_key_create (pthread_key_t *key,(void)(*fun)(void *))、
pthread_setpecific(pthread_key_t  key,(void *)arg)、
void * pthread_getspecific(pthread_key_t  key)、
pthread_delete(pthread_key_t  key)
Pthread_once_t = PTHREAD_ONCE_INIT
   Pthread_once(pthread_once_t *once,(void)(*fun)(void))
Pthread_mutex_t(全部是指针)
   Pthread_mutex_init(pthread_mutex_t *mutex,pthread_mutexattr *attr)、pthread_mutex_lock(pthread_mutex_t *mutex)、
pthread_mutex_unlock(pthread_mutex_t *mutex)
pthread_mutex_trylock(pthread_mutex_t *mutex)
   Pthread_mutex_destory(pthread_mutex_t *mutex)
Pthread_cond_t(全部是指针)
   Pthread_cond_init(pthread_cond_t *cond,pthread_condattr_t *attr)、pthread_cond_wait(pthread_cond_t *cond,pthread_mutex_t *mutex)、pthread_cond_signal(pthread_cond_t *cond)
   Pthread_cond_broadcast(pthread_cond_t *cond):使用广播而不是发信号绝不会错
   Pthread_cond_destory(pthread_cond_t *cond)
Sem_t
Sem_init(sem_t *sem,int pshared,int value)//pshared为0在线程间共享or在进程间
sem_wait(sem_t *sem)、
sem_trywait(sem_t *sem)、
sem_post(sem_t  *sem)、
sem_destory(sem_t *sem)

Pthread_mutexattr_t(条件变量类似)
   Pthread_mutexattr_init(pthread_mutexattr_t  *attr)
   #ifdef _POSIX_THERAD_PROCESS_SHARED
   Pthread_mutexattr_setpshared(pthread_mutexattr_t *attr,int  pshared) //PTHREAD_PROCESS_SHARED ,PRIBATE
   #endif
   Pthread_mutexattr_destory(pthread_mutexattr_t *attr)
附:
Int pthread_equal(pthread_t  t1,pthread_t  t2);
Int Pthread_t  pthread_self(void)
Int pthread_deach(pthread_t id):线程可以分离自己,任何获取其ID的线程也可以随时分离它。
Pthread_cancel(pthread_t thread)
Pthread_setcancelstate(pthread_cancel_disable/enable,int *state)
Pthread_setcanceltype(pthread_cancel_defered/asynchronous,int *type)
Pthread_testcancel()
Pthread_cleanup_push(void(*routine)(void *),void *arg)
Pthread_cleanup_pop(int execut)

线程的分离状态决定一个线程是以什么样的方式来结束自己。
0
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics