Pthread C++是一个跨平台的C/C++线程库,能够为多线程应用程序提供支持。线程库中,线程是由线程ID和线程属性来标识的。线程ID是唯一标识符,用于区分不同的线程。线程属性包括线程的优先级、调度策略、状态等。Pthread C++提供了一系列函数来创建、管理、终止线程。此外,还提供了线程同步和互斥等功能,例如条件变量和互斥锁。
在Pthread C++中,可以使用create()
函数来创建一个新的线程,并返回线程ID。例如:
#include <pthread.h> #include <iostream> void* thread_func(void* arg) { std::cout << "Hello from thread ID: " << pthread_self() << std::endl; return NULL; } int main() { pthread_t thread_id; if (pthread_create(&thread_id, NULL, thread_func, NULL)) { std::cerr << "Error creating thread" << std::endl; exit(-1); } // ... pthread_join(thread_id, NULL); return 0; }
上述代码中,thread_func
是线程函数,它接收一个空指针作为参数。线程函数中输出了线程ID,然后返回NULL。在main
函数中,使用pthread_create()
函数创建了一个新线程,其线程函数为thread_func
,参数为NULL。创建线程后,使用pthread_join()
函数等待线程终止。
线程属性包括线程的优先级、调度策略、状态等。在Pthread C++中,可以通过setname()
函数设置线程名。例如:
#include <pthread.h> #include <iostream> void* thread_func(void* arg) { std::cout << "Hello from thread ID: " << pthread_self() << std::endl; return NULL; } int main() { pthread_t thread_id; pthread_setname(thread_id, "my_thread"); if (pthread_create(&thread_id, NULL, thread_func, NULL)) { std::cerr << "Error creating thread" << std::endl; exit(-1); } // ... pthread_join(thread_id, NULL); return 0; }
在上述代码中,通过pthread_setname()
函数设置了线程名称为"my_thread"。
Pthread C++还提供了线程同步和互斥等功能,例如条件变量和互斥锁。这些功能可用于在线程之间传递信号,保护共享资源,避免多个线程同时访问该资源。
以下是一个简单的条件变量使用示例:
#include <pthread.h> #include <iostream> #include <mutex> #include <condition_variable> int shared_data = 0; std::mutex mtx; std::condition_variable cv; void update_data(int value) { { std::lock_guard<std::mutex> lock(mtx); shared_data += value; } cv.notify_one(); } void worker_1() { for (int i = 0; i < 10; ++i) { update_data(i); std::this_thread::sleep_for(std::chrono::milliseconds(100)); } } void worker_2() { for (int i = 0; i < 10; ++i) { update_data(i * 2); std::this_thread::sleep_for(std::chrono::milliseconds(100)); } } int main() { pthread_t thread_id_1, thread_id_2; if (pthread_create