mutex(mutex这个单词是什么意思)
资讯
2023-11-28
489
1. mutex,mutex这个单词是什么意思?
1. mutex: 互斥体。
这个单词只在计算机领悟中出现,第一次看到的时候就觉得很不理解,翻看一些词典也找不到合适的例句。后来偶然看到一篇博客,才发现这个居然是mutual exclusion的缩写。再结合mutex的用途,就理解了它的意思。
win32程序中,critical section翻译成临界区,其实跟这个mutex是一个东西,实现同一个功能,只不过在不同的平台而已。
2. core dump: 核心转储,或者吐核。
“核心转储”这一中文翻译,还是蛮贴切的。dump,作为动词,有“丢弃,舍弃”的意思,作为名词,为“垃圾堆”。计算机程序出现异常时,把出错的现场状态(内存地址,寄存器状态等)用文件记录出来,以便日后重现出错现场debug用,这个就是core dump。core指的是当前程序的运行状态,dump就是把运行状态“丢”到一个文件中,所以称为“转储”。
3. 自顶向下,自底向上。
这个词在本科学编译原理的时候,第一次看到。当时就觉得特别奇葩,不就是自上而下和自下而上嘛,干嘛搞这么复杂?后来看到英文Top-down, bottom-up,有点了然。这个东西一定是外来语,国人直接翻译过来的。读研时的一个老师给我们上课讲“以前读书的时候,要总结归纳,把复杂的问题简单化。现在你们已经是研究生了,以后发表论文,要学会把简单的事情复杂化。” 他说的是,学术圈的学者们,在发表论文的时候,往往会对自己的论文内容进行包装,看起来“高大上”一些。这个词我觉得就是因此而来。
通俗一点讲解,就是计算机教学的例子。是应该从计算机技术的应用讲到计算机原理(Top-down),还是应该先讲计算机原理再讲计算机应用(Bottom-up)。国内计算机课程的教学,普遍都是Bottom-up的。
2. mutex的取值范围?
mutex为互斥信号量,其初值为1,取值范围为(-1, 0, 1)。 当mutex=1时,表示两个进程皆未进入需要互斥的临界区;当mutex=0时,表示有一个进程进入临界区运行,另外-一个必须等待,挂入阻塞队列;当mutex=-1时,表示有一个进程正在临界区运行,另外一个进程因等待而阻塞在信号量队列中,需要被当前已在临界区运行的进程退出时唤醒。
3. mutex锁原理?
mutex锁的原理如下1.不同于信号量,mutex需要谁拿的锁谁来释放锁。
2.不同于自旋锁,mutex临界区允许睡眠。
3.不同于自旋锁,mutex在拿锁时若锁被别人持有,会根据锁的持有者是否正在运行来决定是乐观自旋或是睡眠等待。 atomic_long_t owner; //owner中记录了锁的持有者的task_struct地址,且低3bit记录了锁的状态
spinlock_t wait_lock; //用来保护wait_list链表
struct list_head wait_list; //等待链表,等着拿锁的进程会被记录在此list上,操作wait_list需要wait_lock的保护owner成员可被认为是mutex锁的本体,此成员为空则说明锁未被持有,非空则说明锁被持有。实际上owner被划分为两个域——task field和flags field,分别是63bit至3bit存放锁的持有者的task_struct地址,2bit至0bit存放锁的状态。其中bit0表示wait_list是否为空,bit1和bit2用来实现handoff机制。
4. 10个线程并发修改1个大数组亿级别?
不管什么语言,用多线程和1个mutex处理这样的数据是最蠢的想法。
应该避免这样的大数据出现,不要积压未处理数据,尽可能在数据量小时处理掉如果避免不了大数据,就采用分层过滤的方式,用一个线程把数据整理分块为10个,然后把这10块分配给10个线程处理各自处理,甚至可以按1、2、4、8个块分别对应1、2、4、8个线程处理。分块只是在数组的下标进行划分。这样才是真正意义的使用多线程的优势,无锁操作5. INITIALIZER如何理解?
有两种方法创建互斥锁,静态方式和动态方式。POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER来静态初始化互斥锁,方法如下: pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER; 在LinuxThreads实现中,pthread_mutex_t是一个结构,而PTHREAD_MUTEX_INITIALIZER则是一个结构常量。
本站涵盖的内容、图片、视频等数据系网络收集,部分未能与原作者取得联系。若涉及版权问题,请联系我们删除!联系邮箱:ynstorm@foxmail.com 谢谢支持!
1. mutex,mutex这个单词是什么意思?
1. mutex: 互斥体。
这个单词只在计算机领悟中出现,第一次看到的时候就觉得很不理解,翻看一些词典也找不到合适的例句。后来偶然看到一篇博客,才发现这个居然是mutual exclusion的缩写。再结合mutex的用途,就理解了它的意思。
win32程序中,critical section翻译成临界区,其实跟这个mutex是一个东西,实现同一个功能,只不过在不同的平台而已。
2. core dump: 核心转储,或者吐核。
“核心转储”这一中文翻译,还是蛮贴切的。dump,作为动词,有“丢弃,舍弃”的意思,作为名词,为“垃圾堆”。计算机程序出现异常时,把出错的现场状态(内存地址,寄存器状态等)用文件记录出来,以便日后重现出错现场debug用,这个就是core dump。core指的是当前程序的运行状态,dump就是把运行状态“丢”到一个文件中,所以称为“转储”。
3. 自顶向下,自底向上。
这个词在本科学编译原理的时候,第一次看到。当时就觉得特别奇葩,不就是自上而下和自下而上嘛,干嘛搞这么复杂?后来看到英文Top-down, bottom-up,有点了然。这个东西一定是外来语,国人直接翻译过来的。读研时的一个老师给我们上课讲“以前读书的时候,要总结归纳,把复杂的问题简单化。现在你们已经是研究生了,以后发表论文,要学会把简单的事情复杂化。” 他说的是,学术圈的学者们,在发表论文的时候,往往会对自己的论文内容进行包装,看起来“高大上”一些。这个词我觉得就是因此而来。
通俗一点讲解,就是计算机教学的例子。是应该从计算机技术的应用讲到计算机原理(Top-down),还是应该先讲计算机原理再讲计算机应用(Bottom-up)。国内计算机课程的教学,普遍都是Bottom-up的。
2. mutex的取值范围?
mutex为互斥信号量,其初值为1,取值范围为(-1, 0, 1)。 当mutex=1时,表示两个进程皆未进入需要互斥的临界区;当mutex=0时,表示有一个进程进入临界区运行,另外-一个必须等待,挂入阻塞队列;当mutex=-1时,表示有一个进程正在临界区运行,另外一个进程因等待而阻塞在信号量队列中,需要被当前已在临界区运行的进程退出时唤醒。
3. mutex锁原理?
mutex锁的原理如下1.不同于信号量,mutex需要谁拿的锁谁来释放锁。
2.不同于自旋锁,mutex临界区允许睡眠。
3.不同于自旋锁,mutex在拿锁时若锁被别人持有,会根据锁的持有者是否正在运行来决定是乐观自旋或是睡眠等待。 atomic_long_t owner; //owner中记录了锁的持有者的task_struct地址,且低3bit记录了锁的状态
spinlock_t wait_lock; //用来保护wait_list链表
struct list_head wait_list; //等待链表,等着拿锁的进程会被记录在此list上,操作wait_list需要wait_lock的保护owner成员可被认为是mutex锁的本体,此成员为空则说明锁未被持有,非空则说明锁被持有。实际上owner被划分为两个域——task field和flags field,分别是63bit至3bit存放锁的持有者的task_struct地址,2bit至0bit存放锁的状态。其中bit0表示wait_list是否为空,bit1和bit2用来实现handoff机制。
4. 10个线程并发修改1个大数组亿级别?
不管什么语言,用多线程和1个mutex处理这样的数据是最蠢的想法。
应该避免这样的大数据出现,不要积压未处理数据,尽可能在数据量小时处理掉如果避免不了大数据,就采用分层过滤的方式,用一个线程把数据整理分块为10个,然后把这10块分配给10个线程处理各自处理,甚至可以按1、2、4、8个块分别对应1、2、4、8个线程处理。分块只是在数组的下标进行划分。这样才是真正意义的使用多线程的优势,无锁操作5. INITIALIZER如何理解?
有两种方法创建互斥锁,静态方式和动态方式。POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER来静态初始化互斥锁,方法如下: pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER; 在LinuxThreads实现中,pthread_mutex_t是一个结构,而PTHREAD_MUTEX_INITIALIZER则是一个结构常量。
本站涵盖的内容、图片、视频等数据系网络收集,部分未能与原作者取得联系。若涉及版权问题,请联系我们删除!联系邮箱:ynstorm@foxmail.com 谢谢支持!