原文: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就可以了。



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

  1. swift语言之多线程操作和操作队列(下)———坚持51天吃掉大象(写技术文章)

    欢迎有兴趣的朋友,参与我的美女同事发起的活动<51天吃掉大象>,该美女真的很疯狂,希望和大家一起坚持51天做一件事情,我加入这个队伍,希望坚持51天每天写一篇技术文章.关注她的微信公众号: ...

  2. [R语言]R语言使用多线程对数据库进行大批量访问时出现无法连接问题

    问题描述: 在R中使用多线程对数据库进行写入,在服务器端运行脚本(linux环境),总是在第6-7万个任务线程时,出现无法连接到数据库的问题.任务中断,错误信息为task 6xxxx failed,C ...

  3. Windows环境下多线程编程原理与应用读书笔记(1)————基本概念

    自从学了操作系统知识后,我就对多线程比较感兴趣,总想让自己写一些有关多线程的程序代码,但一直以来,发现自己都没怎么好好的去全面学习这方面的知识,仅仅是完成了操作系统课程上的小程序,对多线程的理解也不是 ...

  4. [转载]解决linux 下多线程错误 undefined reference to `sem_init'

    转自:https://blog.csdn.net/yzycqu/article/details/7396498?utm_source=copy 解决linux 下多线程错误 undefined ref ...

  5. Kotlin 语言下设计模式的不同实现

    偶然在 Github 上看到 dbacinski 写的 Kotlin 语言下设计模式的不同实现(这里的不同是相对于 Java 语言的),有些实现非常好,但是有些实现的例子不是很赞同.所以自己写了 Ko ...

  6. C语言下的错误处理问题

    今天来分享我认为比较好的几种在C语言下的错误处理方式 方式一: int example(int num) { ) { ; } ; } 在不符合条件的情况下使用return终止程序 方式二: void ...

  7. C语言下文件目录查看

    C语言下文件目录遍历通常会用到下面这些函数 _access()        /* 判断文件或文件夹路径是否合法 */ _chdir() /* 切换当前工作目录 */ _findfirst()   / ...

  8. linux下C语言实现多线程通信—环形缓冲区,可用于生产者(producer)/消费者(consumer)【转】

    转自:http://blog.chinaunix.net/uid-28458801-id-4262445.html 操作系统:ubuntu10.04 前言:     在嵌入式开发中,只要是带操作系统的 ...

  9. linux下c语言的多线程编程

    我们在写linux的服务的时候,经常会用到linux的多线程技术以提高程序性能 多线程的一些小知识: 一个应用程序可以启动若干个线程. 线程(Lightweight Process,LWP),是程序执 ...

随机推荐

  1. IntelliSense 无法仅由函数的返回类型重装分辨

    IntelliSense:无法仅由函数的返回类型重装分辨       d:\programfiles (x86)\microsoft sdks\windows\v7.0a\include\winbas ...

  2. 使用C/C++编译预处理时须要注意的问题

    1.宏定义不是C/C++语句,不须要使用语句结束符":",否则它也被看做宏体的一部分. 2.不要在引用宏定义的參数列表中使用增量和减量运算符,否则将导致变量的多次求值.比如: #d ...

  3. imagick获取图片的大小bug

    <? php /* imagick的获取图片的高度和宽度函数有问题,使用GD函数可获得正确结果 gd函数 array getimagesize ( string $filename [, arr ...

  4. 模式识别 - libsvm该函数的调用方法 详细说明

    libsvm该函数的调用方法 详细说明 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26261173 须要载入(load)SVM ...

  5. System.arraycopy--findbugs检查引发的更改

    EI2: This code stores a reference to an externally mutable object into the internal representation o ...

  6. Matlab.NET混合编程技巧之——直接调用Matlab内置函数(附源码)

    原文:[原创]Matlab.NET混合编程技巧之--直接调用Matlab内置函数(附源码) 在我的上一篇文章[原创]Matlab.NET混编技巧之——找出Matlab内置函数中,已经大概的介绍了mat ...

  7. java观察者模式(转)

    简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象.这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者对象能够自动更新. 不多说 ...

  8. java中的执行顺序

    静态,非静态,构造,先父再子另外,静态块与静态变量的顺序取决于代码中的顺序 Comparable接口应用

  9. java数据结构系列之——数组(1)

    import javax.management.RuntimeErrorException; public class MyArray { private long array[]; private ...

  10. 【Socket规划】套接字Windows台C语言

    [编译环境]:Visual Studio 2013 这是服务端实现流程. #include<stdio.h> #include<stdlib.h> #include<wi ...