Articles of multithreading

如何确定一个程序在Linux的堆栈大小?

如何确定在Linux中的程序的当前堆栈大小? 据说在Linux中每个程序的堆栈大小都是8MB,但是当你使用cat / proc时// mmap会显示不同的大小。 另外,如何确定相关线程的堆栈大小? 既然有人说线程有自己的私有堆栈?

多处理器机器中posix线程的并发性

我对多处理器机器中posix线程的并发性有一些怀疑。 我在SO发现了类似的问题,但没有find确凿的答案。 以下是我的理解。 我想知道我是否正确。 Posix线程是用户级线程,内核不知道它。 内核调度程序将把进程(及其所有线程)视为一个调度实体。 线程库依次select运行哪个线程。 它可以在可运行的线程中分割由内核给出的CPU时间。 用户线程可以在不同的CPU核心上运行。 即让线程T1和T2由Process(T)创build,那么T1可以在Cpu1中运行,而T2可以在Cpu2中运行,但是它们不能同时运行 。 请让我知道,如果我的理解是正确的。 谢谢…

在Linux下AutoResetEvent的C ++等价物是什么?

AutoResetEvent在MSDN中的说明 我正在尝试将在C#中实现的线程池移植到Linux下的C ++中。 我不知道我应该使用哪些function与“AutoResetEvent”类似的行为。

最近GTK 3.22仍然Boehm GC友好(线程问题)?

Boehm的保守垃圾收集器非常有用(比如Bigloo正在使用它, Guile使用类似的东西等等),特别是在Linux上(这是我唯一关心的操作系统;我使用的是Debian / Sid / x86 -64,如果是这样的话, libgc-dev包是版本1:7.4.2-8所以Boehm GC是7.4.2)。 但是, Boehm的GC需要知道使用它的每个线程。 其gc_pthreads_redirects.h (或多或less的内部)头文件重新定义pthread_create为 # define pthread_create GC_pthread_create 实际上,Boehm的GC需要在新的线程调用堆栈中调用GC_pthread_create ( GC_pthread_create正在这样做)。 过去,Glib(2.46)提供了一种使用struct GMemVTable重新定义内存分配的方法, 该方法已被废弃 ,不能再使用 (我的Debian的libglib2.02.0-dev软件包版本为2.50.3-2 )。 有一个g_mem_gc_friendly全局布尔值,但是当查看Glib源代码时,它只是清除内存区域,然后释放它们。 最近的GTK3(我的libgtk-3-dev软件包版本为3.22.11-1 )正在创build线程(对于可能与Dbus相关的东西,也许还涉及到GtkTextView …),通过Glib线程函数使用(间接) pthread_create 。 没有办法(除了修补源代码)被通知该线程创build。 我比任何GTKcallback恐怕会安装(例如使用g_signal_connect )可能会从这些线程调用。 或者,如果我用一些可能使用(或访问)一些GC_malloc -ed缓冲区的方法来GC_malloc一个GTK小部件,那么这可能是一场灾难。 另一方面,GTK中有一个强大的编码规则,所有的GTK操作只能在主线程中进行。 引用Gdk3主题页: 然而, GTK + 不是线程安全的 。 你应该只使用GTK +和GDK从线程gtk_init()和gtk_main()被调用。 这通常被称为“主线程”。 如果我自己遵循这个规则,我相信没有内部的GTK代码会从一些非主线程中调用我的callback(使用Boehm GC)? 我的直觉是,如果有GC_alloc从GTK内部(不是直接由我的代码)从主线程外部调用,将发生灾难(因为这些GTK内部线程尚未启动GC_pthread_create ;可能会调用我的一些代码,例如,因为我是inheritance了一些现有的GTK小部件,或者是因为我连接了一些GTK信号,即使我自己没有在主线程之外使用GTK和Boehm GC编写代码)。 重点是Boehm的GC需要扫描每个线程中的每个堆栈,可能使用它。 FWIW,我在GTK bugzilla上报告了一个可能的bug#780815 […]

处理超过1024个文件描述符,在Linux上使用C语言

我正在使用epoll(边缘触发)和线程的线程networking服务器上工作,我使用httperf来testing我的服务器。 到目前为止,它的性能performance非常好,或者接近发送请求的速度。 直到1024屏障,一切都减慢到大约30个请求/秒。 在Ubuntu 9.04 64位上运行。 我已经试过了: 增加文件描述符的ulimit数量,成功。 它不会改善超过1024个并发连接的性能。 andri @ filefridge:〜/ Dropbox / School / Group 452 /代码/服务器$ ulimit -n 20000 我很肯定,这个缓慢发生在操作系统发生事件发送到epoll之前(是的,我也增加了epoll的限制)。 我需要testing一下我的程序可以处理多less个并发连接,直到它开始变慢(没有操作系统的干扰)。 如何让我的程序运行超过1024个文件描述符? 这个限制可能是有原因的,但是为了基准的目的,我需要它。 更新 感谢所有的答案,但我认为我find了罪魁祸首。 在我的程序中重新定义了__FD_SETSIZE之后,所有东西都开始移动了很多。 当然ulimit也需要提出,但是没有__FD_SETSIZE我的程序永远不会利用它。

我可以同时从几个线程调用一个套接字的accept()吗?

我正在使用Linux 3.2.0,x86_64。 我可以同时从几个线程调用一个套接字的accept()吗?

如何让某些线程优先locking互斥锁使用PTHREADS

假设以下代码正在被10个线程执行。 pthread_mutex_lock(&lock) Some trivial code pthread_mutex_unlock(&lock) 为了说明的目的,可以说线程是T1,T2,T3 ….. T10。 我的要求是,只要T1或T2或T3(即T1,T2或T3中的任何一个)正在等待获取锁,另一个线程T4,T5,T6 ….. T10不应该能够获取锁,即T1,T2和T3应优先获取相对于其他线程的锁。 我想可以通过提高线程T1,T2和T3的优先级来完成 即这里是伪代码 if this thread is T1 or T2 or T3 increase its priority pthread_mutex_lock(&lock) Some trivial code pthread_mutex_unlock(&lock) if this thread is T1 or T2 or T3 decrease it priority to normal 请注意,我想要一个适用于Linux平台的解决scheme,并且应该使用pthreads。 我并不在乎任何其他平台。 另外请注意,我并不是真的想把这3个线程作为实时的,我希望他们展示他们的违规行为(调度和优先级),除了在上面提到的一小段代码中,我希望他们总是优先获取锁。 我已经阅读了一些关于Linux调度策略和调度优先级的手册页,但不能真正做出:( 这会工作吗? 你能帮我完成上述任务所需的确切的pthread API吗? 关心lali

对于pthread,如何从主线程中杀死子线程

我使用pthread_create来创build多个子线程。 一次,主线程想要杀死所有的子线程,否则会有分段失败。 我应该使用哪个函数来完成这个function? 我search了谷歌的答案,并得到像pthread_killfunction。 但是我不知道应该发送给子线程的信号来杀死它们。 我的运行环境是RHEL 5.4,编程语言是C.

Linux时间分割进程还是线程?

一位教授曾经在课堂上告诉我们,Windows,Linux,OS X和UNIX在线程上而不是在进程上扩展,因此,即使在单个处理器上,线程也可能会使应用程序受益,因为应用程序将在CPU上获得更多时间。 我试着用我的机器上的以下代码(它只有一个CPU)。 #include <stdio.h> #include <stdlib.h> #include <pthread.h> pthread_t xs[10]; void *nop(void *ptr) { unsigned long n = 1UL << 30UL; while(n–); return NULL; } void test_one() { size_t len = (sizeof xs) / (sizeof *xs); while(len–) if(pthread_create(xs+len, NULL, nop, NULL)) exit(EXIT_FAILURE); len = (sizeof xs) / (sizeof *xs); while(len–) if(pthread_join(xs[len], NULL)) exit(EXIT_FAILURE); } […]

跟踪线程内存和CPU消耗

我正在编写一个观察其他应用程序并跟踪资源消耗的Linux应用程序。 我正在计划使用Java,但编程语言对我来说并不重要。 目标很重要,所以我可以切换到其他技术或使用模块。 我的应用程序作为subprocess运行任何选定的第三方应用 大多数孩子软件解决了一些algorithm,如graphics,stringsearch等。观察程序跟踪孩子的资源,而它结束了工作。 如果子应用程序是multithreading的,也许有可能跟踪多less资源消耗每个线程? 可以使用任何非分配内存线程技术来编写应用程序:Java线程,Boost线程,POSIX线程,OpenMP,任何其他。