使用pthreads的C++指针错误
C++ pointer errors using pthreads
我是C++语言的新手,在使用pthreads的程序中,我在指针/内存访问方面遇到了一些问题。交易如下:我有一个名为Media的类,如下所示:
class Media
{
public:
int id;
int freeSpace = CAPACITY;
pthread_mutex_t mutex;
};
和一个名为File的类,如下所示:
class File
{
public:
int id;
string name;
int size;
pthread_mutex_t mutex;
Media *media;
...
};
这对问题来说并不重要,但我的程序做了以下几点:我有一个向量,里面有一些随机大小的随机文件,我想用线程把它们放在最小数量的媒体中。问题是,我经常出现"双重自由或腐败(fasttop)"、"双重自由和腐败(!prev)"answers"分段错误"错误,但我找不出原因。我既没有使用mallocs,也没有使用frees,但我可能以错误的方式或类似的方式使用指针。以下是我的主类的一部分,其中包含线程中使用的方法:
vector<Media> medias;
vector<File> files;
vector<File> processedFiles;
void* processFiles(void* args)
{
for (int i = 0; i < mediaQuantity; i++)
{
if (pthread_mutex_trylock(&medias[i].mutex) == 0)
{
Media* media = &medias[i];
for (int j = (int)files.size() - 1; j >= 0; j--)
{
if (pthread_mutex_trylock(&files[j].mutex) == 0)
{
if (files[j].size <= media->freeSpace)
{
media->freeSpace -= files[j].size;
files[j].media = media;
processedFiles.push_back(files[j]);
files.erase(files.begin() + j);
}
pthread_mutex_unlock(&files[j].mutex);
}
}
pthread_mutex_unlock(&medias[i].mutex);
}
}
}
int main()
{
...
Media* media;
...
pthread_t threads[threadQuantity];
pthread_barrier_init(&barrier, NULL, threadQuantity);
...
for (int i = 1; i <= mediaQuantity; i++)
{
media = new Media();
media->id = i;
medias.push_back(*media);
}
//Create threads
for(unsigned i = 0; i < threadQuantity; i++)
pthread_create(&threads[i], NULL, processFiles, NULL);
for(unsigned i = 0; i < threadQuantity; i++)
pthread_join(threads[i], NULL);
...
}
不知怎的,我得到了我在运行时提到的双重免费或损坏和分割错误。有人看到什么不对吗?抱歉问了这么大的问题,提前谢谢!
快速查看代码后,以下是一个提示:
processedFiles.push_back(files[j]);
files.erase(files.begin() + j);
正在修改可由多个线程模拟使用的集合。您应该添加锁以防止两个线程执行此操作。
相关文章:
- 为什么我在空指针错误(链表)中获取成员访问权限
- std::函数指针错误:无法将 &A::a 转换为类型 std::function<>&&
- 为什么我得到 munmap_chunk():无效的指针:错误
- 成员模板函数指针错误
- 删除指针时,未分配被释放的 C++ 指针错误
- Visual Studio 中的"指向引用的指针"错误不会按发生位置的文件名显示
- C++数组指针错误无法将“int*”转换为“int**”
- C++ 通过函数指针错误调用成员函数
- 从 BST 中删除元素(指针错误)
- 随机生成的多维布尔指针错误
- 在测试中使用unique_ptr时指针错误无效
- 使用 malloc 而不是 new 会导致 free():指针错误无效
- 非标准语法;使用 '&' 创建指向成员的指针错误,将成员函数分配给向量时出错
- 抽象类和唯一指针 c++ 错误
- 返回函数指针错误而不带类型定义
- 练习中出现空指针错误
- 指针错误导致的分段错误(简单..)
- free():C++中的指针错误无效
- 使用布尔值数组"表达式必须具有指向对象类型的指针"错误C++
- 指针错误的C 数组