gpt4 book ai didi

c - 在 C 中使用循环创建线程?

转载 作者:行者123 更新时间:2023-11-30 20:20:09 28 4
gpt4 key购买 nike

int main()
{
pthread_attr_t attr;
int policy = SCHED_FIFO;

// sets scheduling policies of threads to FIFO
pthread_attr_init(&attr);
pthread_attr_setschedpolicy(&attr, policy);

// creates 3 threads
int ret;
for (int i = 0; i < MAX_THREAD; i++)
{
ret = pthread_create(&(g_threadInfo[i].threadID), &attr, &thread_func, &g_threadInfo[i].arg);

if (ret != 0)
{
printf("Create thread failed! Error %d", ret);
}

printf("Thread %d created!\n", (i + 1));
}

for (int i = 0; i < MAX_THREAD; i++)
{
pthread_join(g_threadInfo[i].threadID, NULL);
}

return 0;
}

// purpose: function for created threads
// parameters: pointer for thread variable
// returns: void pointer
void* thread_func (void* ptr)
{
int i, sum;
int offset = *(int *) ptr;
for (i = 0; i < 1000; i++)
{
pthread_mutex_lock(&mutex);
sum += offset;
pthread_mutex_unlock(&mutex);
}

printf("%d\n", sum);
pthread_exit(NULL);
}

我想做的是使用 FIFO 策略创建 3 个独立的线程。当我运行该程序时,这是我得到的输出:

线程 1 已创建!

线程 2 创建!

线程 3 创建!

-866347832

0

0

理想情况下,我希望输出如下:

线程 1 已创建!

499500

线程 2 创建!

499500

线程 3 创建!

499500

这是在调用 main 之前初始化的一些变量和结构。

typedef struct
{
int threadNum;
pthread_t threadID;
int arg;
} threadInfo;

threadInfo g_threadInfo[MAX_THREAD];
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER

这是我第一次使用循环来创建线程,所以我猜这会是问题所在?如果有帮助或指点,我们将不胜感激。

最佳答案

看起来调用线程创建另一个线程的速度更快,而您之前的线程仍然处于 1000 次循环中。所以事实上,它不会影响程序本身,它仍然高效,但是除非您在创建另一个线程之前等待前一个线程完成,否则您的输出将不会对应,但如果您这样做,它就像单线程程序。

关于c - 在 C 中使用循环创建线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47381989/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com