利用pthread_create启动多个线程处理同一块buffer并在所有线程处理完成后释放buffer给出C++代码示例
以下是一个使用pthread_create启动多个线程处理同一块buffer并在所有线程处理完成后释放buffer的示例代码:
#include <iostream>
#include <pthread.h>
#include <vector>
// 定义全局变量和互斥锁
char* buffer = nullptr;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
// 线程处理函数
void* threadFunction(void* arg) {
// 获取buffer的指针
char* data = static_cast<char*>(arg);
// 对buffer进行处理,这里仅打印buffer内容
std::cout << "Thread " << pthread_self() << " processing buffer: " << data << std::endl;
// 释放buffer内存
pthread_mutex_lock(&mutex);
delete[] data;
pthread_mutex_unlock(&mutex);
return nullptr;
}
int main() {
// 创建线程ID数组
std::vector<pthread_t> threadIds;
// 创建buffer并复制数据
buffer = new char[100];
strcpy(buffer, "Hello, World!");
// 启动多个线程处理同一块buffer
for (int i = 0; i < 5; i++) {
pthread_t threadId;
pthread_create(&threadId, nullptr, threadFunction, buffer);
threadIds.push_back(threadId);
}
// 等待所有线程结束
for (auto& threadId : threadIds) {
pthread_join(threadId, nullptr);
}
// 释放buffer内存
delete[] buffer;
return 0;
}
在该示例中,通过创建一个全局的buffer指针和互斥锁,多个线程可以同时访问和处理buffer。每个线程在处理完buffer后,通过互斥锁保证对buffer的释放操作是互斥的。最后在主线程中等待所有线程结束后,释放buffer的内存
原文地址: http://www.cveoy.top/t/topic/h71N 著作权归作者所有。请勿转载和采集!