使用 vector::itrator 创建和连接 pthreads<pthread_t>
Creating and Joining pthreads using vector<pthread_t>::iterator
处理一个简单的项目,使用线程来统计多个txt文件。我在编译中遇到的唯一错误涉及pthread_join
循环中使用的vector<pthread_t>::iterator
。
错误是:
error: invalid conversion from long unsigned int* to pthread_t {aka long unsigned int} [-permissive]} `pthread_join(&*iter, (void**)&returnValue);` <--
以下是相关代码:
vector<string> voteTallyFiles;
vector<voteTally> intermVoteTallies;
tallyArgs *pThreadArgs;
void *returnValue;
int index = 0;
getFileNames(VOTE_TALLY_DPATH, voteTallyFiles);
vector<pthread_t> threads(voteTallyFiles.size());
for (vector<pthread_t>::iterator iter = threads.begin(); iter != threads.end(); ++iter, index++)
{
pThreadArgs->fName = voteTallyFiles[index];
pthread_create(&*iter, NULL, countVotes, pThreadArgs);
}
for (vector<pthread_t>::iterator iter = threads.begin(); iter != threads.end(); ++iter)
{
pthread_join(&*iter, (void**)&returnValue);
intermVoteTallies.push_back((voteTally)returnValue)
}
我已经通读了 pthread 的文档,特别是pthread_join,并认为我已经正确跟踪了所有指针/引用/尊重,但显然我在某处错过了一些东西。
我试过了:
pthread_join(iter, (void**)&returnValue);
和
pthread_join(&iter, (void**)&returnValue);
但得到类似的错误:
error: cannot convert std::vector<long unsigned int>::iterator {aka __gnu_c} long unsigned int*, std::vector<long unsigned int>} to pthread_t {aka long unsigned int} pthread_join(iter, (void**)&returnValue); <--
和
error: invalid conversion from std::vector<long unsigned int>::iterator* {aka __gnu_cxx::__normal_iterator<long unsigned int*, std::vector<long unsigned int> >*} to pthread_t {aka long unsigned int} [-fpermissive]} pthread_join(&iter, (void**)&returnValue); <--
在这两种情况下,很明显我正在尝试执行指向非指针转换的指针。 pthread_join
想要一个非指针thread_t
但迭代器根据定义是一个指针,那么取消引用它还不够吗?显式强制转换是解决方案的一部分吗?到目前为止,我尝试过的任何方法都没有奏效。
pthread_join()
的第一个参数应为pthread_t。
您的迭代器iter
类型为 vector<pthread_t>::iterator
。 这意味着*iter
将属于 pthread_t
类型
所以你必须取消引用它:pthread_join(*iter, (void**)&returnValue);
注意:
因此,&*iter
的类型为 pthread_t *
,&iter
的类型是指向迭代器的指针。
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 在 c++11 中为 pthread 设置调度参数
- 如果不包含 pthread,为什么 GCC 的线程标准库实现会抛出异常?
- pthread只有在线程数量较少时才可以正常工作
- pthread执行时间比顺序执行时间差
- 使用 -pthread 如何不违反 ODR 规则?
- 使用 pthread 的多线程
- 销毁 pthread 互斥体和 C++ 中的取消初始化顺序
- 函数 AfxEndThread 中的读取访问冲突"pThread-> was nullptr"
- 锁定步进pthread互斥
- Pthread段错误,使用指向main中变量的指针
- pthread导致的内存泄漏
- GCC:--静态链接到pthread的整个存档配方在最近的GCC版本中停止工作
- 如何显式调用运算符<<
- 正确地编写一个类,并将pthread与vlc库和c++一起使用
- 直接读取 pthread 互斥锁的所有者字段是否安全?
- 为什么 pthread 会减慢代码速度?