Articles of multithreading

线程和fork()。 我该如何处理?

可能重复: 分叉在multithreading程序中 如果我有一个使用fork()的应用程序,并且可能被开发为multithreading,那么安全编程这种应用程序需要考虑哪些大拇指规则/准则?

Linux / C ++如何debugging发布应用程序

我有Linux C ++multithreading应用程序。 现在它在生产服务器上进行testing,并具有段错误。 问题在于我无法在任何testing服务器上重现该错误,并且无法访问生产服务器。 我没有转储或任何其他有用的信息。 只有行:segfault在0000000046bf0fb8 rip 000000000048ac6b rsp 0000000046bf0fa0错误6 我想请问社会方面,我可以从这方面得到一些资料,这些资料会减less我可以搜寻的地方的面积。 由于速度慢,我无法运行生产debugging版本。 我可以添加什么来释放哪些帮助我debugging? 这个bug看起来像multithreading的bug,很难重现。 但我不确定,因为应用程序与MTA的许多不同的电子邮件工作。 平台:Linux 编译器行:g ++ -O3 -D_REENTRANT 谢谢。 更新:感谢您的答案。 我可以包含debugging信息。 我想知道debugging发布版本的基本方法。 例如我有转储和发行版本。 我应该如何继续。 我应该读什么呢? 你能用几句话来解释一下如何尽可能地debugging你的应用程序? 谢谢。

线程 – 高内存使用率

我正在用C编程,在256Mb系统上在Linux中创build了很多Pthreads。 我通常有+ 200Mb免费。 当我用less量的线程运行程序时,它可以工作,但是一旦我创build了大约100个线程,就会产生错误,因为系统内存不足。 我做了几个testing,每个线程使用几乎2Mb。 线程的堆栈大小设置为16Kb。 我用来创build每个线程的代码: pthread_attr_t attr; pthread_attr_init(&attr); size_t stacksize; stacksize = (double) 16*1024; int res = pthread_attr_setstacksize (&attr, stacksize); int res2 = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); if (res != 0 || res2 != 0) { logs << "pthread_attr_XX: error "+int2string(res); exit(-1); } pthread_t id; pthread_create(&id, &attr, &Class::thread_callback, &some_var); 这是正常的还是我错过了什么? 谢谢。

跟踪线程调度

我想要做的是创build一些graphics,详细描述Linux中(两个)线程的执行情况。 我不需要看看线程在做什么,只是在计划时间和时间长短的基础上。 我花了几个小时在互联网上寻找一种方法来跟踪pthreads的调度。 不幸的是,我发现的两个项目需要内核重新编译( LTTng )或glibc修补(NPTL跟踪工具) ,这两者我都做不到(我没有sudo权限的大型集中pipe理系统)。 有没有其他的方式来做这样的事情,或者我将不得不求助于find一台笔记本电脑,我可以补丁/重新编译任何我想要的? 最好的祝福 PS:我会链接到这两个项目,但该网站不允许我(声望<10)。 谷歌的项目名称上的第一个search结果是正确的。

C linux pthread线程优先

我的程序有一个后台线程来填充和交换双缓冲区实现的后台缓冲区。 主线程使用前端缓冲区发送数据。 问题是主线程运行程序时平均得到更多的处理时间。 我想要相反的行为,因为填充后台缓冲区是一个更耗时的过程,然后处理并发送数据到客户端。 我怎样才能在Linux上用C POSIX pthreads来实现呢?

pthread – 如何开始运行一个新的线程,而无需调用连接?

我想从主线程开始一个新的线程。 我不能使用连接,因为我不想等待线程退出并继续执行。 基本上我需要的是类似pthread_start(…),虽然找不到它。 编辑: 由于所有的答案build议create_thread应该开始线程的问题是,在简单的代码下面,它不工作。 下面程序的输出是“主线程”。 这似乎是从未执行的子线程。 任何想法,我错了? 编译并运行在Fedora 14 GCC 4.5.1版上 void *thread_proc(void* x) { printf ("sub thread.\n"); pthread_exit(NULL); } int main() { pthread_t t1; int res = pthread_create(&t1, NULL, thread_proc, NULL); if (res) { printf ("error %d\n", res); } printf("main thread\n"); return 0; }

为什么使用std :: thread :: hardware_concurrency()和boost :: thread :: hardware_concurrency()有区别?

问题本身的描述非常简单。 我正在testing在C + + 11和boost ::线程库的std ::线程库的差异。 这些输出: #include <iostream> #include <thread> #include <boost/thread.hpp> int main() { std::cout << std::thread::hardware_concurrency() << std::endl; std::cout << boost::thread::hardware_concurrency() << std::endl; return 0; } 给了我不同的结果: 0 4 这是为什么? PS:gcc软件包的版本是4.6.2-1.fc16(x86_64)。 我在用着 g++ test.cc -Wall -std=c++0x -lboost_thread-mt -lpthread

用Java来强制虚惊一场

这个问题不是关于虚假的唤醒是否真的很开心,因为这已经在这里全面讨论了: 虚假的唤醒是否真的发生? 因此,这也不是关于,为什么我必须围绕我的wait声明。 这是关于什么的: 我想构build一个虚构的唤醒事件。 我在上面提到的问题中学到的是: 如果一个Linux进程发出信号,它的等待线程将每个都享受一个很好的,热的虚假唤醒。 所以看来,这只会工作在一台Linux机器,实际上我有Ubuntu 11.04 – 64位。 我已经写了一个Java程序,其中有一个线程正在等待一个条件,但是没有循环,而另一个线程正在等待并由另一个线程得到通知。 我认为在一个JVM中启动所有三个线程将强制上述情况,但似乎并非如此。 有没有人有另一个想法如何在Java中构build这样的情况?

Linux线程挂起/恢复

我写了一个代码,其中有两个线程并行运行。 第一个是启动第二个线程的主线程。 第二个线程只是一个简单的线程执行空while循环。 现在我想暂停/挂起第二线程的执行第一线程谁创build它。 过了一段时间,我想恢复执行第二个线程(通过发出一些命令或函数)从暂停/暂停的地方。

multithreading进程的线程ID是否可以与其他正在运行的进程的进程ID相同?

我试图find一种方法来唯一标识多进程环境中的线程。 我有一个服务器,跟踪不同的进程连接到它,其中一些是multithreading的,其中一些不是。 为了从multithreading连接中识别线程,我使用线程ID作为唯一的标识符(在任何给定时间最多连接1个multithreading进程)。 我的问题是:是否有可能其中一个线程的线程ID可能与系统上运行的另一个进程的进程ID相同? 先谢谢您的帮助!