gpt4 book ai didi

linux - 为什么线程消息以相反的顺序出现?

转载 作者:太空宇宙 更新时间:2023-11-04 04:26:18 26 4
gpt4 key购买 nike

当我运行此代码时,我完全以相反的顺序获取线程消息。如果我创建线程 A 和 B,则 A 的消息应先出现,然后是 B。同样,如果我创建一个包含 10 个线程的数组,则消息应按顺序打印。如果存在任何同步问题,则消息不应在所有情况下都显示相同的反向行为。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
/* Required for thread APIs */
#include <pthread.h>

#define NTHREADS 10
int counter = 0;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

void *print_thread_msg(void *ptr){
char *message;
printf("Thread number %ld\n", pthread_self());
pthread_mutex_lock(&mutex);
counter++;
printf("Counter value: %d\n",counter);
message = (char *) ptr;
printf("%s \n",message);
sleep(1);
pthread_mutex_unlock(&mutex);
message = (char *) ptr;
printf("%s \n",message);
}

int main (void){
pthread_t threadA, threadB;
pthread_t thread_id[NTHREADS];

int i,j;

char *msgA = "I am thread A";
char *msgB = "I am thread B";

pthread_create(&threadA, NULL, print_thread_msg, (void *)msgA);
pthread_create(&threadB, NULL, print_thread_msg, (void *)msgB);

for(i=0; i<NTHREADS; i++)
pthread_create(&thread_id[i], NULL, print_thread_msg, (void *)"print_thread_msg");

pthread_join(threadA, NULL);
pthread_join(threadB, NULL);

for(j=0; j < NTHREADS; j++)
pthread_join(thread_id[j], NULL);

printf(" Finally Counter Value : %d\n",counter);

exit(0);
}

最佳答案

你的代码对我来说运行正确。我尝试使用 3 个线程。它总是从线程 A 开始,其余的线程随机跟随。您是否尝试在其他系统中运行代码?

关于linux - 为什么线程消息以相反的顺序出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8612579/

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