linux多线程编程的知识点有哪些(linux多线程的实现方式)

linux多线程编程的知识点有哪些(linux多线程的实现方式)

浏览次数:
信息来源: 用户投稿
更新日期: 2026-01-01 18:24:31
文章简介

linux线程分为两类:一是核心级支持线程,二是用户级的线程。一般都为用户级的线程。要创建多线程必须加载pthread.h文件,库文件pthread。线程的标识符pthread_t在头文件/us

2025阿里云双十一服务器活动

linux线程分为两类:一是核心级支持线程,二是用户级的线程。一般都为用户级的线程。

要创建多线程必须加载pthread.h文件,库文件pthread。线程的标识符pthread_t在头文件/usr/include/bits/pthreadtypes.h中定义:typedefunsignedlongintpthread_t

intpthread_create(pthread_t*restrictthread,constpthread_attr_t*restrictattr,void*(*start_routine)(void*),void*restrictarg);参数:thread输出线程idattr线程属性,默认nullstart_routine线程执行函数arg线程执行参数note:函数成功返回0否则返回错误码

linux多线程编程的知识点有哪些,linux多线程的实现方式

intpthread_exit(void*value_ptr);参数:value_ptr线程返回值指针note:ptrhead_exit()退出调用此函数的线程并释放该线程占用的资源。

pthread_tpthread_self(void);参数:note:返回当前函数的id

创建互斥:intpthread_mutex_init(pthread_mutex_t*restrictmutex,constpthread_mutexattr_t*restrictattr);参数:mutex输出互斥idattr互斥属性,默认nullnote:函数成功返回0否则返回错误码锁住互斥:intpthread_mutex_lock(pthread_mutex_t*mutex);参数:mutex互斥idnote:如果指定的互斥id已经被锁住那么呼叫线程在互斥id完全解锁前将一直处于挂起状态,否则将锁住互斥体。intpthread_mutex_trylock(pthread_mutex_t*mutex);参数:mutex互斥idnote:如果指定的互斥id已经被锁住那么将直接返回一个错误,通过判断此错误来进行不同的处理。pthread_mutex_trylock和pthread_mutex_lock相似,不同的是pthread_mutex_trylock只有在互斥被锁住的情况下才阻塞。解锁互斥:intpthread_mutex_unlock(pthread_mutex_t*mutex);参数:mutex互斥idnote:如果指定的互斥id已经被锁住那么对其解锁释放互斥:intpthread_mutex_destroy(pthread_mutex_t*mutex);参数:mutex互斥idnote:释放指定的mutex占用的资源。函数pthread_mutex_init和pthread_mutex_destroy分别是互斥锁的构造函数和析构函数。

互斥量(mutex)相当于一把锁,可以保证以下三点:◎原子性:如果一个线程锁定一个互斥量,那么临界区内的操作要么全部完成,要么一个也不执行。◎惟一性:如果一个线程锁定一个互斥量,那么在它解除锁定之前,没有其他线程可以锁定这个互斥量。◎非繁忙等待:如果一个线程已经锁定一个互斥量,第二个线程又试图去锁定这个互斥量,则第二个线程将被挂起(不占用任何cpu资源),直到第一个线程解除对这个互斥量的锁定为止。

条件变量是一种可以使线程(不消耗cpu)等待某些事件发生的机制。某些线程可能守候着一个条件变量,直到某个其他的线程给这个条件变量发送一个信号,这时这些线程中的一个线程就会苏醒,处理这个事件。但条件变量不提供锁定,所以它必须与一个互斥量同时使用,提供访问这个环境变量时必要的锁定。3.信号量dijkstra提出了信号量的概念,信号量是一种特殊的变量,只可以取正整数值,对这个正整数只能采取两种操作:p操作(代表等待,关操作)和v操作(代表信号,开操作)。p/v操作定义如下(假设我们有一个信号量sem):p(sem):如果sem的值大于0,则sem减1;如果sem的值为0,则挂起该线程。v(sem):如果有其它进程因等待sem而挂起,则让它恢复执行;如果没有线程等待sem而被挂起,则sem加上1。信号集的创建与打开intsemget(key_tkey,intnsems,intflag);对信号量的操作intsemop(intsemid,structsembufsemoparray[],size_tnops);对信号量的控制intsemctl(intsemid,intsemnumintcmd,unionsemunarg);附:经典的生产者-消费者问题(producer-costomer)是一个著名的同步问题。

以上就是linux多线程编程的知识点有哪些的详细内容,更多请关注主机测评网其它相关文章!

标签:
海外云服务器如何应对大规模流量访问(海外云服务器)
« 上一篇
返回列表
下一篇 »

如本文对您有帮助,就请抽根烟吧!