今天有点思维短路,看完一段有问题的代码,感觉还很对。代码模型如下:
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
typedef struct POINT{
int type ;
int x;
int y;
}POINT;
POINT * p;
void * p_han(void * arg)
{
int idx = *(int *)arg ;
printf("p_han ------------------ type:%d(x= %d ,y = %d ) \n",p[idx].type,p[idx].x,p[idx].y);
}
void * p_han1(void * arg)
{
int idx = *(int *)arg ;
printf("p_han1 ------------------ type:%d(x= %d ,y = %d ) \n",p[idx].type,p[idx].x,p[idx].y);
}
int hande(int idx)
{
pthread_t pid ;
if(p[idx].type == 1 )
{
pthread_create( &pid,NULL,p_han,(void *)&idx);
}
else if( p[idx].type == 0)
{
pthread_create( &pid,NULL,p_han1,(void *)&idx);
}
}
int main()
{
p = (POINT *)m

本文讨论了在创建线程时使用局部变量作为参数可能导致的问题。由于线程调度的不确定性,当线程开始执行时,原始变量可能已经被操作系统回收,从而引起错误。解决方案是为每个线程分配独立的内存空间,并由线程本身负责释放。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



