QQ网名大全

c语言多线程_c语言多线程编程实例

因为您传入的是t的地址:rc = pthread_create(&thread[t], NULL, PrintHello, &t);

所以在PrintHello函数中thread_arg = (int)(*((int*)args));读取时会读取到t的最新值,即8.

这是因为主线程一直在执行,for( t = 0; t < NUM_THREADS; t++ )很快执行完,跳出循环t的值为8,而在PrintHello中sleep(1);肯定会读取到t的最新值8.

直接传t的值即可,如下:

#include<stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h> // 加入这个头文件
#include <pthread.h>
#include <unistd.h>

#define    NUM_THREADS     8

void *PrintHello(void *args)
{
          int thread_arg;
          sleep(1);
          thread_arg = (int)(uintptr_t)args; //这样读取传来的t的值
          printf("Hello from thread %d\n", thread_arg);
          return NULL;

}

int main(void)
{
        int rc,t;
        pthread_t thread[NUM_THREADS];
        for( t = 0; t < NUM_THREADS; t++ )
        { 
            printf("Creating thread %d\n", t);
            rc = pthread_create(&thread[t], NULL, PrintHello, (void *)(uintptr_t)t); // 这样传t的值
            if (rc)
            {
                printf("ERROR; return code is %d\n", rc);
                return EXIT_FAILURE;
            }
        }
        sleep(5);
        for( t = 0; t < NUM_THREADS; t++ )
            pthread_join(thread[t], NULL);
        return EXIT_SUCCESS;
}
佚名
2024-06-02 05:28:10
最佳回答
类似问题(10)
  • 佚名
    2024-06-02 12:18:53

    C语言怎么写线程代码

    通常使用CreateThread函数来创建新的线程.(Unix下使用pthread_create函数)首先指出,线程与线程之间,是并列关系,不会存在"父子线程"...

  • 佚名
    2024-06-02 17:54:59

    c语言 在一个线程上开辟一段内存;

    我实在没有时间写,给你一个大体的框架class A{ char *buf=NULL public: void* create_...

  • 佚名
    2024-06-02 23:37:03

    C语言线程简单例题

    您好,这样的:通过pthread_join得到的终止状态是不同的,总结如下:1.如果thread线程通过return返回,rval_ptr所指向的单元里存放的是...

  • 佚名
    2024-06-02 20:54:46

    一个C语言线程问题

    可以,用struct

  • 佚名
    2024-06-02 15:55:23

    c语言怎么创建线程和使用

    用 pthread_t创建线程名字。然后pthread_create开辟线程。具体使用。比如有一个函数 void *hello(){printf("create...

  • 佚名
    2024-06-02 02:59:26

    C语言如何使用线程池中的某个线程

    问别人问题,还这么牛叉,真心佩服不要给线程派任务,让线程空闲的时候,自己去领任务

  • 佚名
    2024-06-02 02:22:37

    c语言创建线程的时候实质上做了什么?

    #include#include#include#include#include#define MAX 10pthread_t thread[2];pthrea...

  • 佚名
    2024-06-02 02:26:08

    C语言视频教程推荐

    还是要把一般呢书看完 边看边做,观看视频还是不够的 推荐一本 C primer Plus

  • 佚名
    2024-06-02 08:00:00

    如何用c或c++语言编写程序?

    分析: 从坐标(0,0)到(1,1)每次只能沿x或y方向移动一个单位,则移动到坐标(1,1)需要的步骤是|1-0|+|1-0|,等于两个坐标点的x坐标差的绝...

  • 佚名
    2024-06-02 08:00:00

    C#多线程简单例子

    这是正确的。因为新建的线程在运行前,主线程已经结束了。如果t.Start() 后有更多费时的操作的话,那可能结果是你想要的那样!