将双端传递到新的线程

Passing a deque to a new pthread

本文关键字:线程      更新时间:2023-10-16

我有一个代码块,我在一个线程内(让我们称这个线程为a),我希望生成一个新的pthread(让我们称这个线程为b)。线程b需要传递一个 deque,我有以下代码:

void* process_thread_b(void* arg)
{              
  deque<string> *ptr = (deque<string>*)arg;
  cout << "Size -" << ptr->size() << endl;
  deque<string>::iterator it;
  for(it = ptr->begin(); it != ptr->end(); it++)
  {
    cout <<(*it) << endl;
  }
}

上面的代码是线程b's代码。它被传递一个deque,它正确地打印出大小。当我尝试打印出它的任何元素时,我得到:

terminate called after throwing an instance of 'std::bad_alloc'
 what():  std::bad_alloc
Abort (core dumped)

当我生成 pthread 时,我使用以下代码...

 deque<string> myDeque;
 // Add strings to deque here...
 pthread_t dispatchCommands;
 pthread_create(&dispatchCommands, NULL, &process_thread_b, (void*)&myDeque);

底部代码发生在线程 a 中。为什么当我尝试打印出 deque 的元素时,我收到错误,但我可以获得它的大小?

pthread_create将在线程函数开始执行之前很久返回。你的deque早就被摧毁了。您需要在堆上创建它。

我认为这是因为您试图将对甲板的引用投射到空白*,请尝试以下操作:

 deque<string> * myDeque = new deque<string>();

然后使用 -> 访问其功能。

然后你可以直接将 myDeque 投射到一个空指针上,它将保持初始化状态。

即:

 (void*)myDeque

希望这有帮助。