当前位置:首页 » 操作系统 » linux线程参数

linux线程参数

发布时间: 2022-02-27 07:33:27

1. linux 并行 线程选多少合适

具体问题具体分析,如果你主要是做纯计算(比如数学运算,物理计算等),那么线程数应该等于cpu核心数。如果主要是io操作(即需要访问硬件外设),一般来说线程数的提升并不能提高运行速度。 如果是 计算 + IO, 一般来说线程数应该大于cpu核心数。

总的来说,除了第一种,后两种情况都应该实际测试看效果。

2. Linux 多线程问题: 怎么在创建线程后,设置线程的优先级及其他参数,有没有相关的函数。

linux并不是实时操作系统,把下面的代码运行一遍就能够理解了,代码有很详细的注释。

http://blog.csdn.net/lanseshenhua/article/details/5524797

3. linux c编程中,使用pthread_create函数创建线程时,函数的第3个参数的是void

可以这样声明,但是在调用pthread_create函数的时候需要将线程函数的指针强制类型转换成void *(pthread)(void*),否则编译器会报错。

4. linux中一个进程的最大线程数量是多少

linux 系统中单个进程的最大线程数有其最大的限制 PTHREAD_THREADS_MAX
这个限制可以在 /usr/include/bits/local_lim.h 中查看关于Linux命令的介绍,看看《linux就该这么学》,具体关于这一章地址3w(dot)linuxprobe/chapter-02(dot)html
对 linuxthreads 这个值一般是 1024,对于 nptl 则没有硬性的限制,仅仅受限于系统的资源
这个系统的资源主要就是线程的 stack 所占用的内存,用 ulimit -s 可以查看默认的线程栈大小,一般情况下,这个值是 8M

5. linux中线程有哪些属性

线程的资源是共享的,进程的资源是分开的。多个线程同时访问一块资源时一定要注意不能冲突,可以用信号量和锁的思想来解决反问同一个资源问题。

6. 在linux下,我创建两个线程,打开一个文件,怎么实现在线程之间参数的传递

进程内的线程会共享进程的资源,包括文件句柄

pthread_create的实现
pthread_create是基于clone实现的, 创建出来的其实是进程, 但这些进程与父进程共享很多东西, 共享的东西都不用复制给子进程, 从而节省很多开销, 因此,这些子进程也叫轻量级进程(light-weight process)

7. linux线程函数能传递两个参数吗

你可以将你的所有参数放在一个结构体里,然后将这个结构体指针传进去

8. linux下线程属性常用操作有哪些

LinuxThread的线程机制

LinuxThreads是目前Linux平台上使用最为广泛的线程库,由Xavier Leroy ([email protected]) 负责开发完成,并已绑定在GLIBC中发行。它所实现的就是基于核心轻量级进程的"一对一"线程模型,一个线程实体对应一个核心轻量级进程,而线程之间的 管理在核外函数库中实现。

1.线程描述数据结构及实现限制

LinuxThreads定义了一个struct _pthread_descr_struct数据结构来描述线程,并使用全局数组变量 __pthread_handles来描述和引用进程所辖线程。在__pthread_handles中的前两项,LinuxThreads定义了两个全 局的系统线程:__pthread_initial_thread和__pthread_manager_thread,并用 __pthread_main_thread表征__pthread_manager_thread的父线程(初始为 __pthread_initial_thread)。

struct _pthread_descr_struct是一个双环链表结构,__pthread_manager_thread所在的链表仅包括它 一个元素,实际上,__pthread_manager_thread是一个特殊线程,LinuxThreads仅使用了其中的errno、p_pid、 p_priority等三个域。而__pthread_main_thread所在的链则将进程中所有用户线程串在了一起。经过一系列 pthread_create()之后形成的__pthread_handles数组将如下图所示:

图2 __pthread_handles数组结构

新创建的线程将首先在__pthread_handles数组中占据一项,然后通过数据结构中的链指针连入以__pthread_main_thread为首指针的链表中。这个链表的使用在介绍线程的创建和释放的时候将提到。

LinuxThreads遵循POSIX1003.1c标准,其中对线程库的实现进行了一些范围限制,比如进程最大线程数,线程私有数据区大小等等。在 LinuxThreads的实现中,基本遵循这些限制,但也进行了一定的改动,改动的趋势是放松或者说扩大这些限制,使编程更加方便。这些限定宏主要集中 在sysdeps/unix/sysv/linux/bits/local_lim.h(不同平台使用的文件位置不同)中,包括如下几个:

每进程的私有数据key数,POSIX定义_POSIX_THREAD_KEYS_MAX为128,LinuxThreads使用 PTHREAD_KEYS_MAX,1024;私有数据释放时允许执行的操作数,LinuxThreads与POSIX一致,定义 PTHREAD_DESTRUCTOR_ITERATIONS为4;每进程的线程数,POSIX定义为64,LinuxThreads增大到1024 (PTHREAD_THREADS_MAX);线程运行栈最小空间大小,POSIX未指定,LinuxThreads使用 PTHREAD_STACK_MIN,16384(字节)。

2.管理线程

"一对一"模型的好处之一是线程的调度由核心完成了,而其他诸如线程取消、线程间的同步等工作,都是在核外线程库中完成的。在LinuxThreads 中,专门为每一个进程构造了一个管理线程,负责处理线程相关的管理工作。当进程第一次调用pthread_create()创建一个线程的时候就会创建 (__clone())并启动管理线程。

在一个进程空间内,管理线程与其他线程之间通过一对"管理管道(manager_pipe[2])"来通讯,该管道在创建管理线程之前创建,在成功启动 了管理线程之后,管理管道的读端和写端分别赋给两个全局变量__pthread_manager_reader和 __pthread_manager_request,之后,每个用户线程都通过__pthread_manager_request向管理线程发请求, 但管理线程本身并没有直接使用__pthread_manager_reader,管道的读端(manager_pipe[0])是作为__clone ()的参数之一传给管理线程的,管理线程的工作主要就是监听管道读端,并对从中取出的请求作出反应。

创建管理线程的流程如下所示:
(全局变量pthread_manager_request初值为-1)

图3 创建管理线程的流程

初始化结束后,在__pthread_manager_thread中记录了轻量级进程号以及核外分配和管理的线程id, 2*PTHREAD_THREADS_MAX+1这个数值不会与任何常规用户线程id冲突。管理线程作为pthread_create()的调用者线程的 子线程运行,而pthread_create()所创建的那个用户线程则是由管理线程来调用clone()创建,因此实际上是管理线程的子线程。(此处子 线程的概念应该当作子进程来理解。)

__pthread_manager()就是管理线程的主循环所在,在进行一系列初始化工作后,进入while(1)循环。在循环中,线程以2秒为 timeout查询(__poll())管理管道的读端。在处理请求前,检查其父线程(也就是创建manager的主线程)是否已退出,如果已退出就退出 整个进程。如果有退出的子线程需要清理,则调用pthread_reap_children()清理。

然后才是读取管道中的请求,根据请求类型执行相应操作(switch-case)。具体的请求处理,源码中比较清楚,这里就不赘述了。

3.线程栈

在LinuxThreads中,管理线程的栈和用户线程的栈是分离的,管理线程在进程堆中通过malloc()分配一个THREAD_MANAGER_STACK_SIZE字节的区域作为自己的运行栈。

用户线程的栈分配办法随着体系结构的不同而不同,主要根据两个宏定义来区分,一个是NEED_SEPARATE_REGISTER_STACK,这个属 性仅在IA64平台上使用;另一个是FLOATING_STACK宏,在i386等少数平台上使用,此时用户线程栈由系统决定具体位置并提供保护。与此同 时,用户还可以通过线程属性结构来指定使用用户自定义的栈。因篇幅所限,这里只能分析i386平台所使用的两种栈组织方式:FLOATING_STACK 方式和用户自定义方式。

在FLOATING_STACK方式下,LinuxThreads利用mmap()从内核空间中分配8MB空间(i386系统缺省的最大栈空间大小,如 果有运行限制(rlimit),则按照运行限制设置),使用mprotect()设置其中第一页为非访问区。该8M空间的功能分配如下图:

图4 栈结构示意

低地址被保护的页面用来监测栈溢出。

对于用户指定的栈,在按照指针对界后,设置线程栈顶,并计算出栈底,不做保护,正确性由用户自己保证。

不论哪种组织方式,线程描述结构总是位于栈顶紧邻堆栈的位置。

4.线程id和进程id

每个LinuxThreads线程都同时具有线程id和进程id,其中进程id就是内核所维护的进程号,而线程id则由LinuxThreads分配和维护。

9. C++ linux 多线程 多个参数

你要把两个参数放在一个结构体里面
stuct arge{
set<int ,int>

char *

};
然后把 arge 的指针传给 pathred_create 只有这种办法..

10. 关于在linux系统下线程函数的问题

当然是系统给你分配的...

实际上,这个id应该看作输出参数,而不是输入参数,因为你传递的是一个地址,它分配完了线程的id再把这个值填到你给的地址..是系统API给你传递了值

这个id肯定不能是你指定的,就好比fork出来的进程一样...这个资源是系统给你分配的..系统会保证是这个值不和其他的进程或者线程的id重复的...还有open之后给你一个fd,这个东西也是一样,需要保证不能重复...

如果你不打算对这个线程\进程进行控制,那么他的id你都不需要知道...也能正常运行....

热点内容
最好的加密移动硬盘 发布:2024-09-22 12:35:58 浏览:155
c语言编程贪吃蛇 发布:2024-09-22 12:34:21 浏览:744
青椒云电脑什么配置 发布:2024-09-22 12:24:50 浏览:277
pythongbkunicode 发布:2024-09-22 12:24:06 浏览:991
空调压缩机保险在哪里 发布:2024-09-22 12:18:01 浏览:363
笔记本配置看哪些 发布:2024-09-22 12:06:41 浏览:856
魔兽地图脚本制作 发布:2024-09-22 12:04:48 浏览:799
算法衰减 发布:2024-09-22 11:58:42 浏览:49
抖音安卓机客服中心在哪里 发布:2024-09-22 11:58:40 浏览:357
php监控系统 发布:2024-09-22 11:49:58 浏览:930