Articles of multithreading

在4GB iMac OSX 10.6.3 Snow Leopard(32位)上无法通过2542个Java线程

我正在运行下面的程序,试图找出如何configuration我的JVM,以获得我的机器可以支持的最大线程数。 对于那些可能不知道的人,Snow Leopard附带Java 6。 我试着用默认值和下面的命令行来启动它,无论JVM选项设置为什么,我总是在线程2542上得到“内存不足错误”。 java TestThreadStackSizes 100000 java -Xss1024 TestThreadStackSizes 100000 java -Xmx128m -Xss1024 TestThreadStackSizes 100000 java -Xmx2048m -Xss1024 TestThreadStackSizes 100000 java -Xmx2048m -Xms2048m -Xss1024 TestThreadStackSizes 100000 无论我通过它,我得到相同的结果,在2542内存不足错误 public class TestThreadStackSizes { public static void main(final String[] args) { Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { public void uncaughtException(final Thread t, final Throwable e) { System.err.println(e.getMessage()); System.exit(1); } […]

互斥或不互斥?

如果我只有一个读者和一个作者,我需要一个互斥体吗? 阅读器从队列中获取下一个命令( food.front() ),并根据该命令执行任务。 命令执行后,会popup命令。 队列的作者将命令推送到队列( food.push() )。 我需要一个互斥体吗? 我的阅读器(消费者)只执行,如果food.size() > 0 。 我正在使用读取器线程并发送线程。

WaitForMultipleObjects()是否重置所有自动重置事件?

我有一个事件循环等待几个自动重置事件。 事件都被初始化为具有CreateEvent(NULL, false, false, NULL)数组eventHandles_ CreateEvent(NULL, false, false, NULL) 。 while (true) { DWORD waitResult = WaitForMultipleObjects(3, eventHandles_, false, INFINITE); switch (waitResult) { case WAIT_OBJECT_0 + 0: //handle event… case WAIT_OBJECT_0 + 1: //handle event… case WAIT_OBJECT_0 + 2: //handle event… } } 我的问题是:如果事件1和2同时发生,则循环将首先处理WAIT_OBJECT_0 + 1 。 但是当循环再次出现时,事件2是否会继续发出信号? 还是自动重置?

lua车道之间的线程通信

有没有办法让lua lannel线程进行通信或从外部访问线程? 不要使用文档提供的繁忙循环。 一个简单的例子是,一个线程使用一个variables,更新它,改变它等另一个线程或主程序能够访问/获取该variables。 lua车道可以吗? 我的意思是纯粹在lua中,而不是从c / c ++。

如何build立一个新的线程,并在一段时间后终止?

交易是: 我想创build一个类似于在Windows中执行一个新的.exe的线程,所以如果这个程序(新线程)崩溃或进入无限循环:它将被优雅地杀死(超过时间限制或崩溃)和所有的资源都能正常释放。 当线程成功时,我想能够修改一些可能有一些数据的全局variables,例如文件列表。 这就是为什么我不能只是从Windows执行外部可执行文件,因为我不能访问执行到新线程的函数内部的variables。 编辑:澄清了更多的问题。