加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

线程结构作为函数参数C

发布时间:2020-12-16 09:49:20 所属栏目:百科 来源:网络整理
导读:我在将结构指针传递给函数时遇到了麻烦,因为我对这些指针和引用有点困惑.我想修改thread_startfunction中的thread.thread_num值. #include stdio.h#include stdlib.h //malloc,free#include pthread.h#define N 5// void *malloc(size_t);struct thread { pt
我在将结构指针传递给函数时遇到了麻烦,因为我对这些指针和引用有点困惑.我想修改thread_startfunction中的thread.thread_num值.

#include <stdio.h>
#include <stdlib.h> //malloc,free
#include <pthread.h>

#define N 5

// void    *malloc(size_t);

struct thread {   
     pthread_t thread_id;       
     int       thread_num;
     // int       thread_sum;       
};

void *thread_start(void *thread)
{
   struct thread *my_data;
   my_data = (struct thread *)thread;
   printf("num T: %in",my_data->thread_num);
   my_data->thread_num=4;
   printf("num T: %in",my_data->thread_num);

   return NULL;
}

int main(int argc,char *argv[])
{
   int i;
   struct thread  pthread_data;
   struct thread *thread = &pthread_data;

   thread->thread_num=2;
   pthread_create(&thread->thread_id,NULL,thread_start,(void *)&thread);
   printf("num: %in",thread->thread_num);

   pthread_exit(NULL);
   return 0;
}

但打印主体的价值不会改变(2).

然后我想创建一个线程结构数组,但我不知道究竟是怎么做到的:
我想它应该是这样的:

int main(int argc,char *argv[])
{
   int i;
   struct thread  pthread_data;
   struct thread *thread[N-1] = &pthread_data; // I don't know how to manage this.
   for(i=0; i<N; i++)
   {
   thread->thread_num=i;
   pthread_create(&thread[i]->thread_id,(void *)&thread[i]);
   printf("num %i: %in",i,thread[i]->thread_num);
   }
   pthread_exit(NULL);
   return 0;
}

有什么想法吗?

解决方法

我建议你阅读 http://www.advancedlinuxprogramming.com/alp-folder/alp-ch04-threads.pdf

在这里你想要的是:

#define N 5 
typedef struct thread {   
     pthread_t thread_id;       
     int       thread_num;
     // int       thread_sum;       
} ThreadData;
void *thread_start(void *thread)
{
   ThreadData *my_data  = (ThreadData*)thread;
   //there is no guarantee that prints will be in order
   //  we will use its initial thread->num,cause it differs for each thread
   //plus you will see how threads will behave
   int order=my_data->thread_num;
   printf("%i) before num T: %in",order,my_data->thread_num);
   my_data->thread_num=4;
   printf("%i) after assignment num T: %in",char *argv[])
{
   int i;
   ThreadData thread[N]; 
   for(i=0; i<N; i++)
   {
      thread[i].thread_num=i;
     pthread_create(&(thread[i].thread_id),(void *)(thread+i));

   }
   //wait for all threads
   for (i = 0; i < N; i++)
       pthread_join(thread[i].thread_id,NULL); 
   //print results of each thread
   for (i = 0; i < N; i++)
       printf(" %i)thread: number %in",thread[i].thread_num);
   return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读