在C语言中,如果要按顺序打印结果,可以使用线程同步机制来实现。以下是一种可能的实现方式:
下面是一个简单的示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define NUM_THREADS 3
int results[NUM_THREADS] = {2, 1, 3}; // 要打印的结果
int currentResult = 0; // 当前要打印的结果序号
pthread_mutex_t mutex; // 互斥锁
void* printResult(void* threadId) {
int id = *((int*)threadId);
while (1) {
pthread_mutex_lock(&mutex);
if (currentResult >= NUM_THREADS) {
pthread_mutex_unlock(&mutex);
break; // 所有结果都已经打印完毕,退出循环
}
if (currentResult == id) {
printf("Thread %d: %d\n", id, results[id]);
currentResult++;
}
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
int main() {
pthread_t threads[NUM_THREADS];
int threadIds[NUM_THREADS];
pthread_mutex_init(&mutex, NULL);
for (int i = 0; i < NUM_THREADS; i++) {
threadIds[i] = i;
pthread_create(&threads[i], NULL, printResult, (void*)&threadIds[i]);
}
for (int i = 0; i < NUM_THREADS; i++) {
pthread_join(threads[i], NULL);
}
pthread_mutex_destroy(&mutex);
return 0;
}
在这个示例中,我们创建了3个线程,每个线程负责打印一个结果。线程通过互斥锁来保证只有一个线程能够访问共享变量currentResult,并按顺序打印结果。主线程使用pthread_join函数等待所有线程完成打印操作。
这种方式可以确保结果按照顺序打印,因为每个线程在打印结果之前都需要获取互斥锁,而只有一个线程能够获取到互斥锁,其他线程会被阻塞。当一个线程打印完结果后,会释放互斥锁,允许其他线程继续打印。
请注意,这只是一种实现方式,具体的实现可能因环境和需求而异。在实际开发中,还可以使用其他线程同步机制,如条件变量(condition variable)或信号量(semaphore),来实现按顺序打印结果的功能。
领取专属 10元无门槛券
手把手带您无忧上云