草庐IT

c++ - boost::shared_ptr 在多线程中使用它安全吗?

一段时间以来我一直试图找到答案,但我失败了。假设我们有一个从一个线程创建的shared_ptr。然后我们将这个shared_ptr传递给另外两个线程(例如使用一些队列)。所以从这一刻起,原始shared_ptr有2个拷贝,指向同一个原始指针。两个所有者线程将从队列中获取此shared_ptr的拷贝。然后他们会将其传递给另一个线程或将其销毁。问题是-它安全吗?原始指针是否会被正确销毁(不会竞争引用计数器?) 最佳答案 C++标准几乎没有关于线程安全的保证。std::shared_ptr的引用计数是唯一的异常(exception):它保

c++ - 在非静态成员函数上使用 C++ 11 多线程

所以,我的问题是:我有一个名为NetworkInterface的类,它是使用RakNet网络库构建的。它包含一个使用RakNet用来发送和接收数据的while循环的方法。现在,我将NetworkInterface类设为单例,因为我希望它在我编写的游戏中只存在一次。但是,如果我只是用while循环调用该方法,它会停止我的整个gqme,所以这就是为什么我希望它在不同的线程上运行,这样它就不会干扰游戏机制。现在,我使用std::thread对象在不同线程上启动NetworkInterface中的方法,但它抛出C3867错误,指出该方法需要是静态的或某种(我已经在谷歌上找到了)但我不知道我不知

c++ - for循环中的多线程错误

我正在尝试使用线程添加一个简单的for循环,但仍然无法解决问题。我检查了很多原因,但找不到任何解决方案。我有一个简单的类,它有两个方法A()和B()。在另一个类中,我正在调用方法A()。这是它的样子:voidMyClass::A(){std::vectorthreads;for(inti=0;i但我仍然收到一些错误:#0????()(??:??)#100446D62pthread_create_wrapper()(??:??)#275327FB0msvcrt!_cexit()(C:\Windows\SysWOW64\msvcrt.dll:??)#3040C8710??()(??:??)

c++ - Qt : am I doing this right? 的简单多线程

我是StackOverflow的新手,想知道我这样做是否正确:我正在编写一个简单的Qt应用程序来测试多线程(这对我来说也是全新的)。我制作了一个包含小部件的MainWindow和一个继承QThread并覆盖run()方法的MyThread类。该应用程序只显示两个按钮,“StartCounter”和“StopCounter”,以及一个文本字段。当按下“启动计数器”时,将创建一个工作线程并在后台运行,在while循环中不断递增计数器并向主线程(GUI所在的位置)发送更新值。当按下“停止计数器”时,一个信号被发送到停止while循环的主线程,并且计数器停止直到再次按下“开始计数器”。这工作得

c++ - 多线程控制台 I/O

我在多线程应用程序中使用控制台。现在,它只接受输出(printf等),到目前为止我没有遇到任何问题。但是,我也希望能够支持控制台输入,这就是我的生活变得复杂的地方。预先警告一下,我非常不熟悉使用控制台输入和输出的更复杂的细微差别。我在该主题上的经验仅止于printf/cout、scanf/cin和使用SetConsoleTextAttribute()更改颜色(在Windows上)。我宁愿让我的程序尽可能地交叉兼容,但我不反对必须编写特定于平台的代码,只要我能为其他平台找到可行的替代方案。从概念上讲,我希望控制台在它自己的线程上运行,这样它就可以在等待cin时锁定,而不会卡住整个程序或其

c++ - 多线程实时音频编程 - 阻塞或不阻塞

在编写音频软件时,网上很多人都说最重要的是不要使用内存分配或阻塞代码,即不要使用锁。由于这些是不确定的,因此可能导致输出缓冲区下溢并且音频会出现故障。RealTimeAudioProgrmaming当我编写视频软件时,我通常同时使用两者,即在堆上分配视频帧并使用锁和条件变量(有界缓冲区)在线程之间传递。我喜欢它提供的强大功能,因为每个操作都可以使用一个单独的线程,允许软件最大限度地利用每个内核,从而提供最佳性能。对于音频,我想做类似的事情,在线程之间传递大约100个样本的帧,但是,有两个问题。如何在不使用内存分配的情况下生成帧?我想我可以使用预先分配的帧池,但这看起来很乱。我知道您可以

java - Java 和 C/C++ 在多线程方面的区别

我读过一些提示,多线程实现在很大程度上取决于您正在使用的目标操作系统。操作系统最终提供了多线程能力。比如Linux有POSIX标准实现,windows32有另外一种方式。但我想知道编程语言水平上的主要差异。C似乎为同步提供了更多选择,例如Mutex、读写锁、记录锁定、Posix信号量。但是在Java中,我知道我们可以使用像Mutex这样的同步作品吗?以及其他一些高级API,例如AtomicXX和volatile。但是我没有找到记录锁定和读写锁之类的东西。它是Java语言的弱点吗?还是跨平台的牺牲?另外,我想知道这是否是像Nginx这样的Web服务器和像oracle这样的DB都是用C/C

c++ - boost::uuids::random_generator 和多线程的唯一性

当我用单线程生成随机数时,在4Muuid中没有生成重复项,但如果我用两个线程生成每个1M,我看到大约16-20个重复项。可能是什么原因?classTestUuid{public:std::stringGenerateUUid(){boost::uuids::uuiduid;{boost::mutex::scoped_lock(m_mRandomGen);uid=m_oRandomGen();}std::stringstreamss;ss&mUids,unsignedcount){for(unsignedi=0;i::const_iteratorit=mUids.find(sUid);i

c++ - 我是否需要在多线程环境中保护对 STL 容器的读取访问?

我有一个std::list容器和这些线程:无限添加元素的编写器线程。一个读取器/写入器线程,在可用时读取和删除元素。访问容器SIZE的多个读取器线程(通过使用size()方法)有一个普通的互斥锁保护前两个线程对列表的访问。我的问题是,大小读取器线程是否也需要获取此互斥量?我应该使用读/写互斥锁吗?我在使用VisualC++6的Windows环境中。更新:看来答案还不清楚。总结一下主要的疑问:考虑到我不需要确切的值(即我可以假设一个+/-1变化)?竞争条件如何使我的size()调用返回无效值(即与好的值完全无关的值)?回答:一般来说,必须保护读取线程以避免竞争条件。尽管如此,在我看来,更

c++ - 事件/任务队列多线程 C++

我想创建一个可以从多个线程调用其方法的类。但不是在调用它的线程中执行该方法,它应该在它自己的线程中执行它们。不需要返回任何结果,也不应阻塞调用线程。我在下面包含的第一次尝试实现。公共(public)方法将函数指针和数据插入到作业队列中,然后工作线程将其拾取。然而,它并不是特别好的代码,添加新方法也很麻烦。理想情况下,我想将其用作基类,我可以轻松地添加方法(具有可变数量的参数),同时尽量减少麻烦和代码重复。执行此操作的更好方法是什么?是否有可用的现有代码来做类似的事情?谢谢#includeusingnamespacestd;classGThreadObject{classevent{pu