
C 语言多线程编程
发布日期:2021-05-07 20:54:59
浏览次数:17
分类:精选文章
本文共 2492 字,大约阅读时间需要 8 分钟。
一、Linux 下相关函数
函数 | 描述 |
---|---|
int pthread_create (pthread_t *thread, pthread_attr_t * attr, void* (*start_routine)(void *),void *arg); | 创建一个新的线程。编译时带上-lpthread .参数说明: thread: 是一个指针,线程创建成功时,用以返回创建的线程IDattr:指定线程属性,NULL表示使用默认属性start_routine:函数指针,指向线程创建后要调用的函数。这个被线程调用的函数也称为线程函数arg:该参数指向传递给线程函数的参数 |
extern int pthread_join __P (pthread_t __th, void **__thread_return); | 用来等待一个线程的结束。参数说明: __th:被等待的线程标识符__thread_return:一个用户定义的指针,它可以用来存储被等待线程的返回值。 |
extern void pthread_exit __P ((void *__retval)) attribute ((noreturn)); | 终止指定线程。参数说明: __retval:函数的返回代码,只要pthread_join中的第二个参数thread_return不是NULL,这个值将被传递给 thread_return |
int pthread_create(pthread_t thread, pthread_attr_t * attr, void (*start_routine)(void *),void *arg);extern int pthread_join __P (pthread_t __th, void **__thread_return);extern void pthread_exit __P ((void *__retval)) attribute ((noreturn));
二、锁
2.1 互斥锁
extern int pthread_mutex_init (pthread_mutex_t *__mutex, const pthread_mutexattr_t *__mutexattr) __THROW __nonnull ((1));
函数
NULL参数表明使用默认属性。如果需要声明特定属性的互斥锁,须调用函数 pthread_mutexattr_init. 函数pthread_mutex_init
用来生成一个互斥锁。pthread_mutexattr_setpshared
和函数pthread_mutexattr_settype
用来设置互斥锁属性。 前一个函数设置属性pshared
,它有两个取值,PTHREAD_PROCESS_PRIVATE
和PTHREAD_PROCESS_SHARED
.前者用来对不同进程中的线程同步,后者用于同步本进程的不同线程。 后者用来设置互斥锁类型,可选的类型有PTHREAD_MUTEX_NORMAL
、PTHREAD_MUTEX_ERRORCHECK
、PTHREAD_MUTEX_RECURSIVE
和PTHREAD _MUTEX_DEFAULT
.它们分别定义了不同的上所、解锁机制,一般情况下,选用最后一个默认属性。
2.1 pthread_mutex_lock 与 pthread_mutex_unlock
extern int pthread_mutex_lock (pthread_mutex_t *__mutex) __THROWNL __nonnull ((1));
extern int pthread_mutex_unlock (pthread_mutex_t *__mutex) __THROWNL __nonnull ((1));
pthread_mutex_lock
声明开始用互斥锁上锁,此后的代码直至调用pthread_mutex_unlock
为止,均被上锁,即同一时间只能被一个线程调用执行。当一个线程执行到pthread_mutex_lock
处时,如果该锁此时被另一个线程使用,那此线程被阻塞,即程序将等待到另一个线程释放此互斥锁。
三、线程休眠
3.1 sleep 与 usleep
extern unsigned int sleep (unsigned int __seconds);
extern int usleep (__useconds_t __useconds);
sleep()
函数的功能是把调用该函数的线程挂起一段时间,单位是秒(s);usleep()
函数的功能是把调用该函数的线程挂起一段时间 ,单位是毫秒(ms)。
四、Windows相关函数
4.1 _beginthreadex 与 _endthreadex
_CRTIMP __cdecl __MINGW_NOTHROW unsigned long _beginthreadex(void *, unsigned, unsigned (__stdcall *) (void *), void *, unsigned, unsigned *);
_beginthreadex
用于创建一个后台线程并即刻执行,直到运行结束或者调用_endthreadex
函数终止线程。_beginthreadex参数说明 :
- 第一个参数:安全属性,NULL为默认安全属性。
- 第二个参数:指定线程堆栈的大小。如果为0,则线程堆栈大小和创建它的线程相同。
- 第三个参数:指定线程函数的地址,也就是线程调用执行函数地址。
- 第四个参数:传递给线程的参数的指针,可以通过传入对象的指针,在线程函数中再转化为对应类型的指针
- 第五个参数:线程初始状态,0:立即运行;CREATE_SUSPEND:suspended(悬挂)。
- 第六个参数:用于记录线程ID的地址。
4.2 WaitForSingleObject
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年04月03日 04时05分28秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
仿小米商城(上)
2021-05-07
HTML 和 CSS 简单实现注册页面
2021-05-07
(SpringMVC)springMVC.xml 和 web.xml
2021-05-07
jQuery中的动画
2021-05-07
1.2.3 项目、项目集、项目组合以及运营管理之间的关系
2021-05-07
【△重点△】LeetCode - 4. 寻找两个正序数组的中位数——二分查找
2021-05-07
LeetCode - 5. 最长回文子串——字符串、动态规划
2021-05-07
全局锁和表锁 :给表加个字段怎么有这么多阻碍?
2021-05-07
二分查找与插入排序的结合使用
2021-05-07
892 三维形体的表面积(分析)
2021-05-07
16 最接近的三数之和(排序、双指针)
2021-05-07
279 完全平方数(bfs)
2021-05-07
875 爱吃香蕉的珂珂(二分查找)
2021-05-07
桌面图标的自动排列图标
2021-05-07
第十一届蓝桥杯python组第二场省赛-数字三角形
2021-05-07
BST中某一层的所有节点(宽度优先搜索)
2021-05-07
广度优先搜索
2021-05-07
Dijkstra算法的总结
2021-05-07
C语言的运算符和表达式
2021-05-07