【个人总结系列-48】Windows及Linux环境下的C语言多线程编程总结.docx

【个人总结系列-48】Windows及Linux环境下的C语言多线程编程总结.docx

ID:62032055

大小:20.07 KB

页数:2页

时间:2021-04-15

【个人总结系列-48】Windows及Linux环境下的C语言多线程编程总结.docx_第1页
【个人总结系列-48】Windows及Linux环境下的C语言多线程编程总结.docx_第2页
资源描述:

《【个人总结系列-48】Windows及Linux环境下的C语言多线程编程总结.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1.1.1windows下的C语言多线程总结n在VS2010中,代码不需要特殊配置环境(不需要加入Lib等),直接编写代码,运行即可。但是要添加头文件#include,如果用到了Sleep(1000)函数,要添加头文件#include。编写代码时用_beginthread()函数即可,这个函数主要有2个重载n_beginthread()函数的2个重载uintptr_t_beginthread(void(*start_address)(void*),unsignedstack_size,void*arglist);uintptr_t_beg

2、inthreadex(void*security,unsignedstack_size,unsigned(*start_address)(void*),void*arglist,unsignedinitflag,unsigned*thrdaddr);n参数的意义如下:unsignedlong_beginthreadex(void*security,unsigned stack_size,unsigned(__stdcall*start_address )(void*),void*arglist,unsigned initflag,unsigned*thrdaddr );//第1个参

3、数:安全属性,NULL为默认安全属性 //第2个参数:指定线程堆栈的大小。如果为0,则线程堆栈大小和创建它的线程的相同。一般用0 //第3个参数:指定线程函数的地址,也就是线程调用执行的函数地址(用函数名称即可,函数名称就表示地址) //第4个参数:传递给线程的参数的指针,可以通过传入对象的指针,在线程函数中再转化为对应类的指针 //第5个参数:线程初始状态,0:立即运行;CREATE_SUSPEND:suspended(悬挂) //第6个参数:用于记录线程ID的地址n以_beginthread(fun,0,arg)为例进行讲解_beginthread()函数的用法常用的3个参数的

4、函数讲解。nfun为一个回调函数的名称,即一个自定义的函数,启动的线程即执行这个函数体的内容,这个函数体执行完毕,则线程调用完毕。fun(void*args)的参数必须是这样的,args为传入的参数,如果args是一个具体的参数,则将void*类型转成具体的类型使用。那fun(void*args)中的参数args是怎么传到fun()中的呢?因为_beginthread()函数调用时只传了一个函数名fun作为参数,无法得知将什么作为fun()的参数args传递给fun。这个就是靠_beginthread()函数中的arg参数啦,所以fun()的函数名和参数是分开传递的。narg即fu

5、n()函数的参数,如果需要传递给fun()函数不止一个参数,则必须转成一个参数,比如将若干参数整合成一个结构体。在fun()函数要用时,直接将fun函数中的void*arg转成具体的类型,再用。如果fun函数不需要为其传递参数,则_beginthread(fun,0,NULL)n多线程的同步问题线程的同步和互斥的关系:同步是指【散步在不同进程之间的若干程序片断】不能同时运行,而必须按照一定的次序运行。互斥是指一个线程的片段运行完毕之后另一个线程的片段才能运行。互斥是同步的一种特殊形式。n使用CRITICAL_SECTION实现:CRITICAL_SECTIONcritical;//

6、代码临界区声明(一般作为全局变量使用)在开启多线程之前,用InitializeCriticalSection(&critical)初始化。然后开启多个线程。_beginthread(consumer,0,&buffer);//开线程_beginthread(producer,0,&buffer);//开线程在consumer()和producer()函数的编写过程中,用EnterCriticalSection(&critical)和LeaveCriticalSection(&critical)函数将临界代码锁在两个调用语句之间。这2个函数不是锁存临界资源,而是锁存临界代码,而且只锁

7、存相同critical之间的代码,被同一个critical锁存的所有代码段同一时间只能有一个代码段运行。1.1.1Linux下的C语言多线程总结n新建线程:#includepthread_tthreadId_1;intret_1=pthread_create(&threadId_1,NULL,(void*)myCallBack,&num);//成功返回0错误返回错误编号原型intpthread_create(pthread_t*thread,//

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。