c语言下多线程

原文:c语言下多线程

【问题】创建了10个线程,10个线程公用一个线程体,创建如下:

int
t1=0,t2=1,t3=2,t4=3,t5=4,t6=5,t7=6,t8=7,t9=8,t10=9; int
*one=&t1,*two=&t2,*three=&t3,*four=&t4,*five=&t5,*six=&t6,*seven=&t7,*eight=&t8,*nine=&t9,*ten=&t10;

  
thread[3]=CreateThread(NULL,0,processQueue,one,0,NULL);

thread[4]=CreateThread(NULL,0,processQueue,two,0,NULL);

thread[5]=CreateThread(NULL,0,processQueue,three,0,NULL);

thread[6]=CreateThread(NULL,0,processQueue,four,0,NULL);

thread[7]=CreateThread(NULL,0,processQueue,five,0,NULL);

thread[8]=CreateThread(NULL,0,processQueue,six,0,NULL);

thread[9]=CreateThread(NULL,0,processQueue,seven,0,NULL);

thread[10]=CreateThread(NULL,0,processQueue,eight,0,NULL);

thread[11]=CreateThread(NULL,0,processQueue,nine,0,NULL);

thread[12]=CreateThread(NULL,0,processQueue,ten,0,NULL);

DWORD WINAPI processQueue(LPVOID lp)

{

//注意,读队列的时候,一定要free空间。

int i=*((int *)lp);

printf(" %d\n",i);

return 0;

}

按照正常的思维来说,这个显示的结果应该是从0-9(当然顺序可能有变化),但是不明原因,显示的时候,本来应该调用10次,但是却会显示11,12,13
次等不稳定结果【比如:2 1 0 3 5 4 6 6 4 7 8
9】,就是因为这个问题,俺跟杨哥搞了整整一天,直接摸不着头脑,臻哥还有508的伙也是对它没辙……

记得以前见过,在使用windows类库的前提下,c语言提供了两种多线程的方法,一种是CreateThread,另外一种是_beginthreadex.不然就换一种方法吧。

于是跑到508借了一本c编程,仔细看了一下_beginthreadex函数,它说默认情况下vc++中的c/c++运行期库不支持该函数,因为标准c中运行期库是没有多线程的概念。所以,我们必须对vc进行设置。

project--setting->c/c++->的Category对应的组合框中选择Code
Generation类别,从user run-time library组合狂中选择Multithreaded
DLL就可以了。

时间: 2024-09-12 22:04:24

c语言下多线程的相关文章

Linux下多线程编程(C语言)

Linux下多线程编程(C语言) 2.6内核开始使用NPTL(Native POSIX Thread Library)线程库,这个线程库有以下几个目标: POSIX兼容,都处理结果和应用,底启动开销,低链接开销,与Linux Thread应用的二进制兼容,软硬件的可扩展能力,与C++集成等. 这里的线程是指用户空间的线程操作 一.线程相关操作 1.1  pthread_t      pthread_t 在头文件  /usr/include/i386-linux-gnu/bits/pthreadt

c语言socket多线程编程限制客户端连接数

      这篇文章主要介绍了c语言socket多线程编程,可以限制客户端连接数,大家参考使用吧      先上一些多线程需要使用的函数定义:     代码如下: DWORD WINAPI ProcessClientRequests(LPVOID lpParam)  //新线程将会执行的函数定义 {       return 0; }   HANDLE handler=CreateThread(NULL, 0, ProcessClientRequests, &clientsocket, 0, N

有没有大神说下多线程在实际开发中怎么用

问题描述 有没有大神说下多线程在实际开发中怎么用 看完多线程虽然能看懂代码但是始终不能明白多线程的实际应用求点醒!!!**** 解决方案 处理并发,或者对某些内容分块处理,放置进程阻塞,在现在多cpu的情况下,多线程更能凸显它的优势,一堆请求进来,如果你一个个挨着处理,效率会非常低,所以你可以启动多线程, 每个线程负责一部分 解决方案二: 多线程程序中,多个线程被并发的执行以提高程序的效率,CPU不会因为某个线程需要等待资源而进入空闲状态实际开发中用到的不多,比如数据处理,数据量非常大,又可以分

linux下多线程,运行显示connect:address already in use

问题描述 linux下多线程,运行显示connect:address already in use linux下多线程,运行显示connect:address already in use 什么情况-- 解决方案 报错信息为,端口被占用. 多线程访问的时候,记得及时的释放链接.并且你可以调一下链接数,调大一些.至少要比你线程数大. 解决方案二: Address already in use: connect解决 Address already in use: connect 的错误Tomcat报

串口通讯-Linux下多线程串口通信问题

问题描述 Linux下多线程串口通信问题 我做的一个项目,把串口读写采用了一个独立的线程,进行数据的读写,在调试时,发现只要启动另外一个计算量比较大的线程,串口通信就出错了,而只要不启动这个线程,可以启动其他线程,串口工作没有任何问题,求原因? 解决方案 在C#中使用SerialPort类实现串口通信,多线程问题在C#中使用SerialPort类实现串口通信 遇到多线程问题在C#中使用SerialPort类实现串口通信 遇到多线程问题 解决方案二: 这两个线程有耦合吧?认真分析一下之间的联系.可

并发编程下多线程多进程的应用场景

问题描述 并发编程下多线程多进程的应用场景 实现高并发程序时,多线程编程,或者多进程编程它们各自的优势是什么,即它们的应用场景, 解决方案 多线程程序可以更有效利用cpu等资源,但是线程共享相同的内存地址,所以必须严格考虑同步和数据访问的共享问题.多进程可以任意部署到单个计算机甚至多个计算机,可获得更好的伸缩性. 解决方案二: 多线程or多进程. 这主要取决于你的应用场景. 你的应用场景是否支持你使用多进程的方式.比如你的应用是需要从一个消息队列里面取出消息来快速处理,并且这些消息之间还是有相应

字符串匹配-c语言下如何用正则或者串查找匹配特定字符串并提取出来

问题描述 c语言下如何用正则或者串查找匹配特定字符串并提取出来 最近在编程时遇到个问题,c语言下如何用正则或者串查找匹配特定字符串并提取出来?如在一大堆字符中提取www.XXX.com,还望大神指点一下,最好能详细点~

linux下多线程-linux下 多线程共享数据问题

问题描述 linux下 多线程共享数据问题 环境:linux64位服务器 现有海量文件(按秒级的时间顺序源源不断的来),我需要起多线程读取这些文件,并利用文件内容构建一个比较庞大的数据结构(各种map.list的组合),另外还有一批线程检测这个数据结构某些位置的值并触发具体的任务(当然也可以在构建数据结构的同时进行触发). 问题是: 1.多线程如何并发的构建这个数据结构(结构中的list是需要按照文件到来时间排序的),要对数据结构里面的所有数据都上锁么?上锁上在哪?能不上锁么? 2.如何并行的对

JDBC一个connection下多线程查询表数据会产生线程等待

问题描述 JDBC一个connection下多线程查询表数据会产生线程等待 案例: 从Oracle数据库将表及数据通过JDBC的方式采集到另一Oracle数据库,数据量均为千万级,从源数据库读取的时候采用ORACLE的ROWNUM分页方式,JDBC每次读取1000条,批量插入目标库,测试发现ORACLE的ROWNUM分页效率很是问题,越到后面越慢,WEBLOGIC后台甚至出现线程请求超时. 后来采用多线程的方式,创建一个连接,后台起100个线程,测试发现跟单线程的效率差不了多少,分析代码后,线程