Articles of multithreading

CRITICAL_SECTION设置并获得单一的bool值

现在写复杂的class ,觉得我用了很多CRITICAL_SECTION 。 据我所知,有一些types的primefaces操作,总是执行没有任何硬件或软件中断。 我想检查我是否正确理解一切。 设置或获取primefaces值,我们不需要CRITICAL_SECTION因为这样做不会有中断。 bool是primefaces的。 所以有我的陈述,要问,如果他们是正确的,如果他们是正确的,什么types的variables也可以设置或得到没有CRITICAL_SECTION ? PS我正在谈论获取或设置每个方法一个单一的值 ,而不是两个,不是五个,而是一个。

在C ++的两个不同的内核中创build两个线程

我读了一些关于这个问题的文章。 这个案子似乎并不容易。 我想在两个核心中创build两个不同的线程。 我读的文章太复杂了。 我甚至无法根据这些文章创build一个简单的线程。 另一方面,我需要了解计算机必须具备多less内核,才能在一个内核上使用内核或只创build线程。 我想在窗户上做。 任何帮助将非常欢迎 PS:我不是在C + +亲。 所以如果有可能,请指导我更简单的方法。

上下文切换可能导致高CPU

我们正在分析性能问题,我们最多可能有500个工作线程,CPU使用率不是很高。 上下文切换可能导致高CPU? 换句话说,由于CPU使用率不高,上下文切换(500个线程)在这里不成问题。

提高Windows的互斥体实施

据我所知,在旧版本的Boost boost::mutex实现中,Windows是使用临界区域完成的。 但在最新版本的Boost 1.51中,我发现互斥体的实现是基于事件的。 有人知道这个变化背后的理由是什么吗? 是否因性能原因而完成? 关键部分是否被弃用?

multithreading和多进程的性能差异

几年前,在Windows环境中,我做了一些testing,让CPU计算密集型+内存访问密集型+ I / O访问密集型应用程序的多个实例运行。 我开发了两个版本:一个在多处理下运行,另一个在multithreading下运行。 我发现多处理的性能要好得多。 我读了其他地方(但我不记得该网站)。 其中的原因是在multithreading的情况下,对于单个内存pipe道和I / Opipe道来说,它们是“战斗”的,这使得性能比多处理 但是,我再也找不到那篇文章了。 我想知道,直到今天,下面的情况是否仍然如此? 在Windows中,使algorithm代码在多处理下运行,性能会比multithreading更好。

Grand Central Dispatch(`libdispatch`)是否可以在Windows上使用?

我正在研究multithreading,GCD似乎比使用pthread.h和pthreads-win32手动编写解决scheme更好。 不过,尽pipe看起来libdispatch正在开发或即将开始工作,但是大多数新的POSIX兼容系统…我必须问,Windows怎么样? libdispatch移植到Windows有什么机会? 防止这种情况发生的障碍是什么? 如果说到这一点, 我需要做些什么来预制这个portage? 编辑:我已经知道的一些事情,开始讨论: 我们需要一个可在Windows上编译的块兼容编译器,不是吗? PLBlocks会处理吗? 我们可以使用LLVM 块的运行时间吗? 我们libdispatch用APR调用replace用户空间libdispatch所有pthread.h依赖项,以实现可移植性吗? 或者,或者,使用pthreads-win32我想… 编辑1:我听说,这是完全不可能的,永远不会,因为libdispatch (不知何故)取决于kqueue ,它不能在Windows上提供…有没有人知道这是真的吗?

Direct2D中的multithreading

我正在尝试创build一个简单的D2D游戏引擎(它至less必须能够在窗口中显示和移动图像),并且一切正常,直到决定切换到multithreading版本。 我阅读这篇 MSDN文章,并build议从多个线程使用一个multithreading工厂。 但是这篇文章声称,有几个单线程工厂会更有效率(尽pipe本文描述了服务器端渲染场景,原理与我的情况相同,我错了吗?)。 当我尝试使用单线程工厂的方法时,所有的图像都被显示和移动,但是有可怕的闪烁。 在我的WM_PAINT处理程序,我试图做这样的事情: for (CSingleThreadEngine *pElSingleThreadEngine : m_SingleThreadEngines) //each CSingleThreadEngine instance has its own D2D factory and an image collection pElSingleThreadEngine->Draw(); 和pElSingleThreadEngine-> Draw()是这样画的: m_pRenderTarget->BeginDraw(); m_pRenderTarget->SetTransform(D2D1::Matrix3x2F::Identity()); m_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White)); for (CGameImage *pImage : m_GameImages) { if (FAILED(pImage->Draw())) throw runtime_error("An object cannot be drawn"); } m_pRenderTarget->EndDraw(); 我认为这里的错误是只有一个窗口有几个ID2D1HwndRenderTarget实例,因为如果我在单独的窗口中绘制每个线程,它就可以工作。 但是我只想在一个窗口中绘制,而且我无法避免为此使用多个ID2D1HwndRenderTarget实例。 所以我的问题是: 创buildmultithreadingDirect2D应用程序的最佳做法是什么? 如果我正在使用的方法是正确的,我在做什么错了,我该如何解决? 任何帮助将不胜感激。

从C#调用WaitForSingleObject

我正在尝试从C#中调用WaitForSingleObject方法,如下所述: https://msdn.microsoft.com/en-us/library/windows/desktop/ms687032(v=vs.85).aspx 为了调用这个函数,我需要创build一个Handle,或者我需要得到一个IntPtrtypes的Handle,怎么做? 我试过这个function,我发现: http : //www.pinvoke.net/default.aspx/kernel32.WaitForSingleObject [DllImport("coredll.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Auto)] public static extern IntPtr CreateEvent(HANDLE lpEventAttributes, [In, MarshalAs(UnmanagedType.Bool)] bool bManualReset, [In, MarshalAs(UnmanagedType.Bool)] bool bIntialState, [In, MarshalAs(UnmanagedType.BStr)] string lpName); 或者,例如,当我从控制台获取句柄时: IntPtr handle = Process.GetCurrentProcess().MainWindowHandle; 它抛出一个DllNotFoundException。 这里有什么问题? 我需要它来运行这个函数调用的过程,并从它的过程中获取一个转储,用于我的ClrMd库学习。 任何帮助将不胜感激。 代码示例: static void Main(string[] args) { var autoEvent = new AutoResetEvent(false); […]

获取进程主线程的句柄

我在一些小的testing应用程序中创build了一个额外的线程,并希望从这个额外的线程挂起主线程。 额外的线程是通过CreateRemoteThread从外部进程创build的。 由于SuspendThread需要一个HANDLE来挂起线程,我想知道如何从我的附加线程中运行的代码中获得这个HANDLE 。

Windows API类似于pthread_cancel?

是否有一个Windows的本地API类似于pthread_cancel,pthread_testcancel等? 如果不是,我们如何在Windows中使用pthread_cancel机制来模拟取消另一个线程?