Articles of multithreading

内存映射文件是线程安全的

我想知道是否可以通过使用内存映射文件对单个文件执行multithreading写入,并确保两个线程不写入同一区域(例如,通过交错固定大小的logging),从而减less了同步在应用程序级别,即不使用我的代码中的关键部分或互斥体。 但是,经过Google的search,我还是不确定。 来自微软的这个链接说: 首先,资源明显节省,因为两个进程共享内存的物理页面和用于支持内存映射文件的硬盘存储页面。 其次,只有一组数据,所以所有的观点都是一致的。 这意味着通过一个进程的视图对内存映射文件中的页面进行的更改会自动反映到另一个进程的内存映射文件的公共视图中。 本质上,Windows NT不需要做任何特殊的簿记来确保数据对两个应用程序的完整性。 但它是否适用于属于同一进程的线程? 这将是合理的(因为我的写作是不相交的),但是我不太了解内存映射的底层实现(例如,操作系统要做什么)。 示例用例,其中myFunction由每个线程执行: // crt – index of current thread, in 0..n-1 // n – thread count // memArea – pointer to memory location obtained from mapping a file void myFunction(int crt, int n, int*memArea){ for (int i=1; i<512; i++) memArea[ ( sizeof(int)*( n*i + crt ) […]

延迟初始化caching…如何使其线程安全?

这就是我所拥有的: 一个Windows服务 C# multithreading 该服务使用Read-Write-Lock(一次多次读取,写入其他读/写线程的块) 一个简单的,自写的DB C ++ 足够小,以适应内存 足够大,不想在启动时加载它(例如10GB) 阅读performance非常重要 写作不那么重要 树结构 树节点中保存的信息存储在文件中 为了获得更快的性能,文件仅在第一次使用和caching时加载 延迟初始化,以加快数据库启动 由于数据库会经常访问这些节点信息(每秒数千次),而且由于我不经常写这些信息,所以我想使用某种双重检查的locking模式。 我知道在这里有很多关于双重检查locking模式的问题,但似乎有这么多不同的意见,所以我不知道什么是最适合我的情况。 你会怎么做我的设置? 这是一个例子: 一百万个节点的树 每个节点存储一个键值对的列表(存储在一个文件中用于保存,文件大小为10kB) 当第一次访问一个节点时,这个列表被加载并存储在一个映射中(像std :: map那样) 下次访问这个节点时,我不必再次加载文件,我只是从地图上获取它。 唯一的问题是:两个线程第一次同时访问节点,并想要写入caching映射。 这是不太可能发生的,但这不是不可能的。 这是我需要线程安全的地方,不需要太多的时间,因为我通常不需要它(特别是一旦整个DB在内存中)。

如何获得Win32的内核数量?

我在Windows上编写一个程序,需要运行尽可能多的线程作为可用的核心。 但是我不知道如何获得核心的数量。 有任何想法吗?

什么是最好的方式来在Win上分叉/线程的PHP?

我有一个PHP脚本,检查(千)网站上的更新。 有时候(随着网站数量的增加,频率越来越高),我在其中一个站点的更新上遇到了执行超时,而整个脚本就会消失。 我能想到的最好的想法是分叉每个更新,所以如果它死了,整体更新只是继续。 从我看来,似乎PHP线程是不能依赖的,特别是在Windows平台(我不得不努力)。 我想过使用curl作为分叉机制,但是对于服务器(在时间和处理能力方面)是不是会花费更多的代价呢? 我很乐意听到关于PHP分叉/线程的一些想法和经验… 谢谢,奥默。

我怎样才能从一个单独的线程处理窗口消息?

我希望启动一个单独的线程来处理窗口消息(通过阻塞的GetMessage循环),但是仍然在初始线程中创build窗口。 在单独的线程中,只要它启动,我就用PM_NOREMOVE调用PeekMessage来确保消息队列的存在(是否有必要?),然后.. AttachThreadInput(initial thread id,GetCurrentThreadId(),true) ..最后进入消息循环 我还没有使用互斥体或cs来确保这是及时发生的,但是为了简单起见,我仅仅在最初的线程中使用了一个Sleep语句。 无论如何,窗口消息似乎不被单独的线程拦截。 我有些不确定我是否正确地做了这件事,并且希望得到任何可能的指导。 两个线程都在同一个进程中 谢谢你们

在Windows中join相当于

我如何等待一个线程在Windows中死亡? 这就是我想我的代码看起来像: main thread: creating thread: thread1 waiting for thread1 to die //rest of the code 我正在使用Win32 API。

在Linux上工作的线程限制与networking/ IO绑定应用程序的进程相比有什么限制?

我听说在linux下的多核服务器上,当你只有一个进程但是multithreading时,不可能达到最高性能,因为Linux对IO有一些限制,所以在8核心服务器上有8个线程的进程可能是比8个进程慢。 任何意见? 还有其他的限制,可能会减慢应用程序? 这些应用程序是一个networkingC ++应用程序,服务于100多个客户端,有一些磁盘IO。 更新:我担心除了我自己实现的锁之外,还有一些与IO相关的问题…在几个线程中执行simultaniousnetworking/磁盘IO没有任何问题吗?

Java线程优先级不起作用

这是一个关于线程优先级的testing。 代码来自Thinking in Java p.809 import java.util.concurrent.*; public class SimplePriorities implements Runnable { private int countDown = 5; private volatile double d; // No optimization private int priority; public SimplePriorities(int priority) { this.priority = priority; } public String toString() { return Thread.currentThread() + ": " + countDown; } public void run() { Thread.currentThread().setPriority(priority); while (true) […]

如何从win32进程获取线程句柄列表?

是否有可能获得在任何给定的时间线程句柄列表的当前进程在Win32(在C + +)?

在Java中创build的线程在Windows和Linux上的行为是否有所不同?

据我所知,Java正在使用操作系统线程(与Erlang相比),这意味着在Windows和Linux上使用Java创build的线程可能会有所不同。 Windows和Linux上的Java线程有什么不同? 最大的区别是什么? 这可能只是performance上的差异?