线程的学习(一)

原创 2015年07月08日 00:01:47

线程的初步重点在线程的创建、分离、退出、同步。
线程分离:分离的线程在线程完成后,系统会自动回收他的储存器资源;不分离的线程,如果不pthread_join或者不结束整个进程,系统不会回收资源。
线程同步:共有互斥量、读写锁、条件变量、自旋锁、屏障共五种方式。
各种同步,只是提供了一种机制,并不是用了以后就会一定实现同步,仍然需要人为的控制使用逻辑才能实现同步。

线程退出:1、线程可以简单的从启动例程中返回,指return,启动例程,即线程的执行函数
2、线程可以被同一进程的其他线程取消
3、线程调用pthread_exit

函数名称

函数功能

说明

pthread_create

创建线程

线程变量:pthread_t

pthread_equal

判断两个线程ID是否相等


pthread_self

获得自身的线程ID


pthread_exit

终止一个线程


pthread_join

等待一个线程

除非指定线程调用pthread_exit、从启动例程返回或者被取消,否则调用线程将一直阻塞

类似于waitpid的功能

pthread_detach 分离一个线程

pthread_cancel

请求取消一个线程

并不等待线程终止,仅提出请求

pthread_cleanup_push

注册一个线程退出函数

必须与pthread_cleanup_pop成对出现

pthread_cleanup_pop

调用注册的线程退出函数

必须与pthread_cleanup_push成对出现

pthread_mutex_init

初始化互斥量

互斥量

变量类型:pthread_mutex_t

pthread_mutex_destory

销毁互斥量,需要在释放内存前调用

pthread_mutex_lock

对互斥量进行加锁,如果已经加锁则阻塞

pthread_mutex_trylock

尝试对互斥量进行加锁,如果已经加锁,则返回EBUSY

pthread_mutex_unlock

对互斥量进行解锁

pthread_mutex_timedlock

带超时的对互斥量的加锁,时间是绝对时间而非相对时间

pthread_rwlock_init

初始化读写锁

读写锁

变量类型:pthread_rwlock_t

pthread_rwlock_destroy

销毁读写锁,需要在释放读写锁占用的内存之前调用

pthread_rwlock_rdlock

以读模式进行加锁

pthread_rwlock_wrlock

以写模式进行加锁

pthread_rwlock_unlock

解锁读写锁

pthread_rwlock_timedrdlock

带超时的以读模式加锁

pthread_rwlock_timedwrlock

带超时的以写模式加锁

pthread_cond_init

初始化条件变量

条件变量

适用于异步等待某个处理结果

变量类型:pthread_cond_t

pthread_cond_destory

对条件变量进行反初始化,需要在释放条件变量底层的内存空间之前调用

pthread_cond_wait

等待条件变量为真

pthread_cond_timedwait

带超时的等待条件变量为真,时间为绝对时间

pthread_cond_signal

通知线程条件已经满足,至少能唤醒一个线程

pthread_cond_broadcast

通知线程条件已经满足,唤醒所有等待该条件的线程

pthread_spin_init

对自旋锁进行初始化

自旋锁

与互斥量类似,但不是通过休眠使进程阻塞,而是在获取之前一直在忙等(自旋)。在等待自旋锁可用之前,CPU不能做其他的事情

变量类型:pthread_spinlock_t

pthread_spin_destory

对自旋锁进行反初始化

pthread_spin_lock

获取自旋锁,获取成功之前一直在自旋

pthread_spin_trylock

获取自旋锁,如果不能成功,立即返回EBUSY

pthread_spin_unlock

解锁自旋锁

pthread_barrier_init

初始化屏障

屏障

当阻塞线程达到设定值,则所有阻塞线程均被唤醒

变量类型:pthread_barrier_t

pthread_barrier_destroy

对屏障进行反初始化

pthread_barrier_wait

线程等待,表明线程已经完成工作,准备等待其他线程赶上来




版权声明:本文为博主原创文章,未经博主允许不得转载。

一位资深程序员大牛给予Java学习者的学习路线建议

java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈...
  • lmb55
  • lmb55
  • 2016年09月01日 13:34
  • 4340

C++学习路线与推荐书籍

很多人也许像我一样都想找一份学习的辟邪剑谱,转一个别人的帖子,希望对能够给用的。欲练此功,不必挥刀自宫的,呵呵。         这句说的好:“最后,编程语言并非计算机科学技术的全部,尤其对于在校的...
  • lijun5635
  • lijun5635
  • 2013年03月04日 09:35
  • 23981

一位资深程序员大牛给予Java初学者的学习路线建议

java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈...
  • li_xiao_ming
  • li_xiao_ming
  • 2016年08月29日 08:47
  • 19563

android 线程通信学习

  • 2015年05月22日 09:20
  • 803KB
  • 下载

LINUX 线程,学习代码

  • 2017年06月28日 23:19
  • 19KB
  • 下载

线程学习三

  • 2012年07月05日 17:44
  • 1.81MB
  • 下载

线程学习一 源代码

  • 2012年07月03日 20:46
  • 1.8MB
  • 下载

Java线程学习

  • 2012年05月27日 21:24
  • 2KB
  • 下载

VS2010轻松学习C#-从零到深入-天轰穿.NET4趣味编程视频教程_第40讲:感性的认识线程

  • 2017年07月26日 02:58
  • 37.91MB
  • 下载

java线程初级学习

  • 2011年11月22日 11:49
  • 36.37MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:线程的学习(一)
举报原因:
原因补充:

(最多只允许输入30个字)