【发布时间】:2022-09-30 00:28:41
【问题描述】:
我正在使用 C,我想通过多线程在输出屏幕中获取字符串“ABCABCABCABCABCABC”。第一个线程显示\'A\' 字符,第二个线程显示\'B\',第三个线程显示\'C\'。如果我编译以下代码:
#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
#define cantidad_impresion_letra 6
pthread_mutex_t semaforo = PTHREAD_MUTEX_INITIALIZER;
void *escribirA(void *unused){
int i;
for(i=0;i<cantidad_impresion_letra;i++){
pthread_mutex_lock(&semaforo);
printf(\"A\");
pthread_mutex_unlock(&semaforo);
}
}
void *escribirB(void *unused){
int i;
for(i=0;i<cantidad_impresion_letra;i++){
pthread_mutex_lock(&semaforo);
printf(\"B\");
pthread_mutex_unlock(&semaforo);
}
}
void *escribirC(void *unused){
int i;
for(i=0;i<cantidad_impresion_letra;i++){
pthread_mutex_lock(&semaforo);
printf(\"C\");
pthread_mutex_unlock(&semaforo);
}
}
int main(){
pthread_t thread1, thread2, thread3;
pthread_create(&thread1,NULL,escribirA,NULL);
pthread_create(&thread2,NULL,escribirB,NULL);
pthread_create(&thread3,NULL,escribirC,NULL);
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
pthread_join(thread3, NULL);
return(0);
}
在通过 Dev-C++ 的 Windows 上,控制台会抛出我:ABACBACBACBACBACBC 但如果我编译相同Linux 中的代码,我得到CCCCCCBBBBBBAAAAAA。
有人可以解释一下吗?
-
使用多线程,一般来说你想线程独立和并行工作。如果你想要一个特定的订单,那么不使用线程,因为那样你会浪费资源。
-
如果你必须做这个毫无意义的练习,请注意你只需要一个线程函数。将索引作为 pthread_create 参数传递。使用三个 condvar 或信号量,以便每个线程可以向链中的下一个发出信号。全局计数器/轮询解决方案是希望...\'非最优\'并获得较低的分数。
标签: c linux multithreading mutex