hentai_cxk 2020-05-28 11:42 采纳率: 0%
浏览 100

linux中多线程参数问题

新手在w3cschool简单的学了下pthread,复制了这样的代码到Linux

#include
#include
#include
using namespace std;
#define NUM_THREADS 5
void PrintHello(void *threadid)
{

// 对传入的参数进行强制类型转换,由无类型指针变为整形数指针,然后再读取
int tid = *((int
)threadid);
cout << "Hello w3cschool!线程 ID, " << tid << endl;
pthread_exit(NULL);
}

int main ()
{
pthread_t threads[NUM_THREADS];
int indexes[NUM_THREADS];// 用数组来保存i的值
int rc;
int i;
for( i=0; i < NUM_THREADS; i++ ){

cout << "main() : 创建线程, " << i << endl;
indexes[i] = i; //先保存i的值
// 传入的时候必须强制转换为void* 类型,即无类型指针

rc = pthread_create(&threads[i], NULL,
PrintHello, (void *)&(indexes[i]));
if (rc){
cout << "Error:无法创建线程," << rc << endl;
exit(-1);
}
}
pthread_exit(NULL);
}

按理来说运行结果应该是
main() : 创建线程, 0
main() : 创建线程, 1
main() : 创建线程, 2
main() : 创建线程, 3
main() : 创建线程, 4
Hello w3cschool! 线程 ID, 4
Hello w3cschool! 线程 ID, 3
Hello w3cschool! 线程 ID, 2
Hello w3cschool! 线程 ID, 1
Hello w3cschool! 线程 ID, 0

但我的运行结果是
main() : 创建线程, 0
main() : 创建线程, 1
main() : 创建线程, 2
main() : 创建线程, 3
main() : 创建线程, 4
Hello w3cschool!线程 ID, 0
Hello w3cschool!线程 ID, 642005376
Hello w3cschool!线程 ID, 4196480
Hello w3cschool!线程 ID, 0
Hello w3cschool!线程 ID, 0

每次的数字还不一样,想问问为什么

  • 写回答

1条回答 默认 最新

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥15 系统 24h2 专业工作站版,浏览文件夹的图库,视频,图片之类的怎样删除?
  • ¥15 怎么把512还原为520格式
  • ¥15 MATLAB的动态模态分解出现错误,以CFX非定常模拟结果为快照
  • ¥15 求高通平台Softsim调试经验
  • ¥15 canal如何实现将mysql多张表(月表)采集入库到目标表中(一张表)?
  • ¥15 wpf ScrollViewer实现冻结左侧宽度w范围内的视图
  • ¥15 栅极驱动低侧烧毁MOSFET
  • ¥30 写segy数据时出错3
  • ¥100 linux下qt运行QCefView demo报错
  • ¥50 F1C100S下的红外解码IR_RX驱动问题