草庐IT

【JavaEE】线程池

全部标签

c++ - C++ 中的简单多线程服务器?

我想编写一个简单的服务器应用程序,它将从客户端应用程序获取命令并在单独的线程中运行这些命令。我正在查看serverclassindlib.有没有人有使用这个的经验?它与使用Boost的Asio相比如何?ExampleofserverindlibExamplesofclient/serverinBoostAsio 最佳答案 BoostAsio可以很容易地做到这一点。看看theexamplesintheHighscoretutorial,它展示了如何使用Boost进行多线程异步输入/输出。#include#include#include

c++ - ExitThread 与允许线程函数正常退出 - C++

我的应用程序有一个使用CreateThread创建的线程。从所述线程中调用ExitThread和允许线程正常退出(即到达线程函数的末尾)之间有什么区别?我正在使用C++和VisualStudio2008。谢谢。 最佳答案 其实有一点很重要:...,在C++代码中,线程在调用任何析构函数或执行任何其他自动清理之前退出。因此,在C++代码中,您应该从线程函数返回(编辑Source) 关于c++-ExitThread与允许线程函数正常退出-C++,我们在StackOverflow上找到一个类似

c++ - 线程安全和位域

我知道位域依赖于编译器,但我没有找到有关最新g++和VisualC++2010位域线程安全的文档。位域成员的操作是原子的吗? 最佳答案 不幸的是,“线程安全”在编程中是一个非常过载的术语。如果您指的是对位域的原子访问,答案是否定的(至少在我所知道的所有处理器上是这样)。您可以原子访问32位机器上的32位内存位置,但这仅意味着您将读取或写入整个32位值。这并不意味着另一个线程不会做同样的事情。如果您想要停止,您可能需要同步。如果您指的是对位域的同步访问,那么答案也是否定的,除非您将访问包装在更高级别的同步原语(通常基于原子操作)中。简

c++ - 如果我只需要它在其他线程中的值,我是否应该在一个线程中锁定一个变量,如果我不这样做,为什么它会起作用?

我知道thisquestion,但我相信我的担忧非常不同。我最近使用线程和OpenGL创建了一个SDL应用程序。我有一个循环运行的线程,它不断更新我绘制到屏幕上的对象的状态。状态很简单,就是一个boolean数组(数组值为true的时候画,为false的时候不画)。目前,我的任何变量都没有互斥锁,一切正常。即使在一次绘制之间只更新了状态数组的一半,帧率也比更新率高得多(或至少等于),因此更新一半的状态是可以接受的。现在,我最初开始在使用中断的嵌入式系统上研究与此类似的想法。每隔一段时间,就会触发一个中断,更新状态数组,然后继续执行。现在我在多核台式机上,同时更新阵列,我想知道为什么没有

c++ - 命名空间中的全局变量 - 线程中的值不同

考虑以下情况:2个不同的网络端口,通过boost::asio每个都有自己的线程1个端口正在接收和处理数据-classDataConnection包裹在std::thread中1个端口用于发送统计信息classStatConnection也包裹在std::thread中为了计算连接数(和其他小数据片段),我的想法是使用staticnamespace中的变量喜欢:#includenamespaceapp{namespacestatus{staticstd::atomiccounter=0;}}这适用于DataConnection类(class)。这里我递增counter在c'tor中并查看

c++ - 为什么 Win32 没有僵尸线程问题?

只知道如果我们用默认的pthread_attr_t调用pthread_create,那么Posix会保留退出的线程信息供其他线程查询,如果我们有僵尸线程泄漏没有调用pthread_join。但据我所知,在Windows平台上,您不需要在线程存在后调用WaitForSingleObject或GetExitCodeThread。那么Win32如何处理僵尸线程问题,会不会出现资源泄露? 最佳答案 在Windows上,线程是HANDLE从用户模式引用的内核对象。内核对象的一个​​属性是它"remainsinmemoryaslongasatl

c++ - 如何在C++中设置线程数

我使用std::sort编写了以下用于多线程排序的多线程程序。在我的程序中,grainSize是一个参数。由于grainSize或可以生成的线程数是系统相关的功能。因此,我没有得到应该将grainSize设置为的最佳值是多少?我在Linux上工作?intcompare(constchar*,constchar*){//somecomplexuserdefinedlogic}voidmultThreadedSort(vector::iteratordata,intlen,intgrainsize){if(lenitems;intgrainSize=10;multThreadedSort(

C++ 线程 : what does join do exactly?

这个问题在这里已经有了答案:Whatdoesstd::thread.join()do?(4个答案)关闭6年前。以下代码来自Dashstd::thread的示例.#include#include#includevoidfoo(){//simulateexpensiveoperationstd::this_thread::sleep_for(std::chrono::seconds(1));}voidbar(){//simulateexpensiveoperationstd::this_thread::sleep_for(std::chrono::seconds(1));}intmain(

java - JNI线程模型?

当我从Java调用C/C++时,JavaVM或JNI是否会创建一个新线程来运行C/C++代码,而我的Java线程正在等待?我问这个是因为我的C/C++代码在GPU上运行某些东西,我需要检查特定的缓冲区以取回结果。获得结果后,我需要再次调用我的Java函数。所以我在考虑在C++端创建一个线程,该线程不断检查缓冲区,一旦有一些数据可用,就会回调Java端。 最佳答案 JNI不会在后台创建任何新线程。native函数与调用native函数的java方法在同一线程中执行。反之亦然,当native代码调用java方法时,java方法与调用该方

c++ - 为什么同一内核(超线程)中的两个线程比两个内核的 L1 写访问权限更差?

我编写了一个c/c++程序(printf和std::的混合)来了解不同的缓存性能。我想并行化一个在大块内存上计算的进程。我必须对相同的内存位置进行多次计算,因此我将结果写到位,覆盖源数据。完成第一个微积分后,我会用之前的结果再做一个。我猜想如果我有两个线程,一个执行第一个微积分,另一个执行第二个,我会提高性能,因为每个线程完成一半的工作,从而使处理速度提高一倍。我已经阅读了缓存的工作原理,所以我知道如果做得不好,可能会更糟,所以我编写了一个小程序来衡量一切。(请参阅下面的机器拓扑、CPU类型和标志以及源代码。)我看到了一些奇怪的结果。显然,为了执行计算。如果我在同一个缓冲区或两个不同的