在Linux環境下使用C++進行多線程編程,主要依賴于POSIX線程庫(pthread)。以下是一些基本步驟和示例代碼,幫助你開始使用C++進行多線程編程。
首先,你需要包含pthread庫的頭文件:
#include <pthread.h>
線程函數是每個線程執行的函數。它必須符合以下簽名:
void* thread_function(void* arg);
參數arg
是一個指向線程參數的指針。
使用pthread_create
函數創建線程:
#include <iostream>
#include <pthread.h>
// 線程函數
void* thread_function(void* arg) {
int* num = static_cast<int*>(arg);
std::cout << "Thread " << *num << " is running." << std::endl;
return nullptr;
}
int main() {
pthread_t threads[5];
int thread_args[5] = {1, 2, 3, 4, 5};
// 創建線程
for (int i = 0; i < 5; ++i) {
if (pthread_create(&threads[i], nullptr, thread_function, &thread_args[i]) != 0) {
std::cerr << "Failed to create thread "<< i << std::endl;
return 1;
}
}
// 等待線程結束
for (int i = 0; i < 5; ++i) {
pthread_join(threads[i], nullptr);
}
std::cout << "All threads have finished." << std::endl;
return 0;
}
使用g++編譯你的程序,并鏈接pthread庫:
g++ -pthread your_program.cpp -o your_program
./your_program
在多線程編程中,同步機制非常重要。常用的同步機制包括互斥鎖(mutex)、條件變量(condition variable)和信號量(semaphore)。
#include <iostream>
#include <pthread.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void* thread_function(void* arg) {
pthread_mutex_lock(&mutex);
std::cout << "Thread " << *(static_cast<int*>(arg)) << " is running." << std::endl;
pthread_mutex_unlock(&mutex);
return nullptr;
}
int main() {
pthread_t threads[5];
int thread_args[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; ++i) {
if (pthread_create(&threads[i], nullptr, thread_function, &thread_args[i]) != 0) {
std::cerr << "Failed to create thread "<< i << std::endl;
return 1;
}
}
for (int i = 0; i < 5; ++i) {
pthread_join(threads[i], nullptr);
}
std::cout << "All threads have finished." << std::endl;
return 0;
}
#include <iostream>
#include <pthread.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
bool ready = false;
void* producer(void* arg) {
pthread_mutex_lock(&mutex);
std::cout << "Producer is producing data..." << std::endl;
// 模擬生產數據
sleep(2);
ready = true;
std::cout << "Data is ready." << std::endl;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
return nullptr;
}
void* consumer(void* arg) {
pthread_mutex_lock(&mutex);
while (!ready) {
std::cout << "Consumer is waiting for data..." << std::endl;
pthread_cond_wait(&cond, &mutex);
}
std::cout << "Consumer received data." << std::endl;
pthread_mutex_unlock(&mutex);
return nullptr;
}
int main() {
pthread_t producer_thread, consumer_thread;
pthread_create(&producer_thread, nullptr, producer, nullptr);
pthread_create(&consumer_thread, nullptr, consumer, nullptr);
pthread_join(producer_thread, nullptr);
pthread_join(consumer_thread, nullptr);
std::cout << "Program finished." << std::endl;
return 0;
}
線程結束后,可以使用pthread_exit
函數顯式地結束線程:
void* thread_function(void* arg) {
// 線程工作
pthread_exit(nullptr);
}
通過以上步驟,你可以在Linux環境下使用C++進行基本的多線程編程。根據具體需求,你可以進一步探索和使用更多的同步機制和線程管理功能。