在C語言中,可以使用線程庫pthread來實現多線程負載均衡。
首先,創建一個主線程來分配任務給工作線程。可以使用隊列或者其他數據結構保存任務。
創建一組工作線程,每個線程都會循環執行以下步驟:
a. 線程從任務隊列中獲取一個任務。
b. 執行任務。
c. 返回步驟a,繼續獲取下一個任務。
以下是一個簡單的示例代碼:
#include <stdio.h>
#include <pthread.h>
#define NUM_THREADS 4
#define NUM_TASKS 10
pthread_mutex_t lock;
pthread_cond_t cond;
int task_queue[NUM_TASKS];
int task_index = 0;
void* worker(void* arg) {
while (1) {
pthread_mutex_lock(&lock);
while (task_index >= NUM_TASKS) {
// 等待任務
pthread_cond_wait(&cond, &lock);
}
int task = task_queue[task_index++];
pthread_mutex_unlock(&lock);
// 執行任務
printf("Thread %ld: Processing task %d\n", (long)arg, task);
if (task == NUM_TASKS - 1) {
break;
}
}
pthread_exit(NULL);
}
int main() {
pthread_t threads[NUM_THREADS];
pthread_mutex_init(&lock, NULL);
pthread_cond_init(&cond, NULL);
// 初始化任務隊列
for (int i = 0; i < NUM_TASKS; ++i) {
task_queue[i] = i;
}
// 創建工作線程
for (long i = 0; i < NUM_THREADS; ++i) {
pthread_create(&threads[i], NULL, worker, (void*)i);
}
// 等待工作線程結束
for (int i = 0; i < NUM_THREADS; ++i) {
pthread_join(threads[i], NULL);
}
pthread_mutex_destroy(&lock);
pthread_cond_destroy(&cond);
return 0;
}
在這個示例中,我們創建了4個工作線程,并初始化了一個包含10個任務的任務隊列。工作線程會從任務隊列中獲取任務并執行,當任務隊列為空時,工作線程會等待主線程通知有新的任務可用。主線程會根據任務隊列的狀態,動態地將任務分配給工作線程進行負載均衡。
注意,這只是一個簡單的示例,實際的負載均衡可能需要更復雜的策略和調度算法。 此外,還需要注意線程間的同步和互斥,以確保數據安全性。