首页 > 试题广场 >

以下关于多线程的叙述错误的是:

[单选题]
以下关于多线程的叙述错误的是:
  • 线程同步的方法包括使用临界区,互斥量,信号量等
  • 两个线程同时对简单类型全局变量进行写操作也需要互斥
  • 实现可重入函数时,对自动变量也要用互斥量加以保护
  • 可重入函数不可以调用不可重入函数
推荐
C.可重入函数可认为是可以被中断的函数,自动变量定义的时候才被创建,函数返回时,系统回收空间,他是的是局部作用域变量,不需要互斥量。可重入函数对全局变量才需要互斥量保护。
编辑于 2015-08-08 16:40:41 回复(1)
  在 实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果这个函数不幸被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任 务调用这个函数的数据,从而导致不可预料的后果。那么什么是可重入函数呢?所谓可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会 出错。不可重入函数在实时系统设计中被视为不安全函数。
满足下列条件的函数多数是不可重入的:

 


(1)函数体内使用了静态的数据结构;


(2)函数体内调用了malloc()或者free()函数;


(3)函数体内调用了标准I/O函数。


如何写出可重入的函数?在函数体内不访问那些全局变量,不使用静态局部变量,坚持只使用缺省态(auto)局部变量,写出的函数就将是可重入的。如果必须访问全局变量,记住利用互斥信号量来保护全局变量。或者调用该函数前关中断,调用后再开中断。

 

可重入函数可以被一个以上的任务调用,而不必担心数据被破坏。可重入函数任何时候都可以被中断,一段时间以后又可以运行,而相应的数据不会丢失。可重入函数或者只使用局部变量,即保存在CPU寄存器中或堆栈中;或者使用全局变量,则要对全局变量予以保护。

 

发表于 2017-01-18 12:54:04 回复(1)
A: 临界区不是方法。。
B:    单独是写操作不需要,如果写之前还有其他操作则可能要(毕竟还有原子操作),感觉这叙述很不严谨
C: 自动变量外部不可见,不需要互斥量保护
D:    可重入函数调用了不可重入函数那它就不是可重入函数了。。。
应该选AC吧。。
发表于 2015-03-28 20:47:07 回复(3)
自动变量属于局部变量,不用互斥保护,可重入函数中的全局变量需要互斥保护
发表于 2016-06-19 14:49:18 回复(0)
自动变量Automatic Variable)指的是局部作用域变量
自动变量Automatic Variable)指的是局部作用域变量
自动变量Automatic Variable)指的是局部作用域变量
发表于 2020-04-06 16:27:51 回复(0)
        可重入函数也可以这样理解,重入即表示重复进入,首先它意味着这个函数可以被中断,其次意味着它除了使用自己栈上的变量以外不依赖于任何环境(包括static),这样的函数就是purecode(纯代码)可重入,可以允许有多个该函数的副本在运行,由于它们使用的是分离的栈,所以不会互相干扰。如果确实需要访问全局变量(包括static),一定要注意实施互斥手段。可重入函数在并行运行环境中非常重要,但是一般要为访问全局变量付出一些性能代价。
        可重入函数可认为是可以被中断的函数,自动变量定义的时候才被创建,函数返回时,系统回收空间,他是的是局部作用域变量,不需要互斥量。可重入函数对全局变量才需要互斥量保护。
发表于 2022-01-24 09:45:13 回复(0)
实现可重入函数时,引入的全局变量才需要用互斥量加以保护,故C说法错误,选C。
编辑于 2018-12-19 18:17:09 回复(0)
可重入函数可以简单的理解为不使用全局变量,不调用相关涉及全局变量函数的函数,它在多线程调用时不会有并发问题。
发表于 2017-10-18 17:26:48 回复(0)
局部的自动变量对外不可见,不用保护
发表于 2017-09-12 21:32:05 回复(0)
C.可重入函数可认为是可以被中断的函数,自动变量定义的时候才被创建,函数返回时,系统回收空间,他是的是局部作用域变量,不需要互斥量。可重入函数对全局变量才需要互斥量保护。
发表于 2017-04-20 10:00:10 回复(0)
A是进程同步吧,进程同步和线程同步并不完全一致,如果是同一个进程中的多个线程的同步呢??不是很合适吧
发表于 2016-11-15 11:48:36 回复(0)
可重入函数,简单理解为可以被中断的函数,在可重入函数中使用全局变量时,需要使用互斥量来保证在多进程的情况下,全局变量的一致性。
发表于 2016-08-16 10:40:19 回复(0)
自动变量包括函数形参和非static局部变量,他也不是说动态变量的意思。自动变量说明这个变量是再栈上在运行时自动创建自动撤销。
发表于 2016-03-03 19:52:47 回复(0)
C
发表于 2015-08-05 23:32:42 回复(0)