我有一个回调函数,它将在我没有任何访问或控制权的线程中调用(一个库创建了该线程,并要求我将回调函数暴露给该线程)。由于 zmq 套接字不是线程安全的,这就是我正在做的事情:
void callback () {
zmq::socket_t tmp_sock(...); // create a socket which will be used only once
...
}
但是,回调被非常频繁地调用(每秒数百次)。有没有更好的解决方案来更有效地使用套接字?我问这个是因为指南说:如果您打开和关闭很多套接字,这可能表明您需要重新设计您的应用程序。
编辑:基于@raffian 的回答。回调函数中的一个thread_local static
(在 C++11 中可用)变量可以正常工作。