【发布时间】:2019-06-28 13:39:46
【问题描述】:
我只是为了自娱自乐地修改这段代码:
#include <windows.h>
#include <process.h>
#include <stdlib.h>
#include <stdio.h>
void print_message(void *param)
{
int thread_counter = *((int*)param);
printf("Thread #%i\r\n", thread_counter);
_endthreadex(0);
}
int main()
{
unsigned thread_ID;
HANDLE thread_handle;
int thread_count = 10;
HANDLE thread_handles[thread_count];
for(int i = 0; i < thread_count; i++)
{
thread_handles[i] = (HANDLE)_beginthreadex(NULL, 0, &print_message, &i, 0, &thread_ID);
thread_handle = thread_handles[i];
}
WaitForMultipleObjects(thread_count, thread_handles, TRUE, INFINITE);
return EXIT_SUCCESS;
}
一个
Output
Thread #8
Thread #10
Thread #10
Thread #10
Thread #10
Thread #10
Thread #10
Thread #10
Thread #10
Thread #10
我认为问题在于我传递了对变量 i 的引用,而变量 i 在 for 循环中正在递增,而线程正在使用/操作此引用。
如何避免竞争条件,并将变量 i 的值传递给线程函数?
我也想将字符串/字符数组传递给线程函数,但我似乎不明白该怎么做。
我在 Windows 10 上使用 Tiny C 编译器 (TCC)
【问题讨论】:
-
您无法控制每个线程何时运行。除非你想从前一个线程开始的下一个线程发出信号,它已经启动,否则你可能需要传递单独的内存。您可以使用一个数组并将指针传递给该数组中的条目。
-
重复关于 gazillion pthread_create 问题
标签: c multithreading pointers race-condition