首页 > 试题广场 >

以下关于线程以下描述正确的是()

[单选题]
以下关于线程以下描述正确的是()
1.windows线程创建时,默认绑定在1个特定的CPU上
2.可采用SetThreadAffinityMask接口设置线程与某个cpu绑定
3._beginthreadex比CreateThread创建线程安全是因为使用_beginthreadex会创建一个_tiddata,在调用一些诸如strtok函数时会将需要保护的数据存入_tiddata
4.使用_beginthread创建线程时,线程执行函数必须为_cdecl约束规范,而_beginthreadex指定的线程执行函数必须为_stdcall
  • 1,2
  • 1,3
  • 1
  • 以上都不正确
windows创建进程不会自动绑定CPU,要人工手动绑定。
发表于 2016-07-13 10:56:54 回复(0)
关于第3点的补充
参考链接 http://www.cnblogs.com/shokey520/p/3669440.html

_beginthread会在创建线程时主动创建并管理_tiddata
而CreateThread仅在运行到需要_tiddata的函数时才创建,并且在线程结束时不会释放_tiddata空间,最终造成泄漏
编辑于 2015-08-08 10:06:55 回复(0)
1.windows线程创建时,不会绑定在特定的CPU上,需要手动绑定,或者调用 SetThreadAffinityMask接口进行绑定 2._beginthread 函数可创建在 start_address 开始执行例程的线程。 start_address 中的例程必须使用  __cdecl(用于本机代码)或 __clrcall(用于托管代码)调用约定,并且应没有返回值。传递给_beginthreadex的start_address中的例程必须使用__stdcall(用于本机代码)或__clrcall(用于托管代码)调用约定,并且必须返回线程退出代码。
发表于 2021-11-17 12:26:29 回复(0)
A
发表于 2015-06-30 14:11:15 回复(0)
D
解释:1:不正确。windows线程创建时,不会绑定在特定的CPU上,需要手动绑定,或者调用 SetThreadAffinityMask接口进行绑定;
           2:正确。参考  http://blog.csdn.net/beyond_cn/article/details/15813361
           3:不正确。参考2的链接。欢迎各位纠正。
           4:正确。参考msdn: 
            _beginthread 函数可创建在 start_address 开始执行例程的线程。  start_address 中的例程必须使用  __cdecl (用于本机代码)或  __clrcall (用于托管代码)调用约定,并且应没有返回值。
            传递给  _beginthreadex     start_address   中的例程必须使用   __stdcall (用于本机代码)或   __clrcall (用于托管代码)调用约定,并且必须返回线程退出代码。
            所以,通过1,就能选出D。
发表于 2015-07-09 09:58:07 回复(2)
mark
发表于 2022-07-30 08:49:57 回复(0)
windows创建进程不会自动绑定CPU,要人工手动绑定。
发表于 2017-04-17 09:33:14 回复(0)
关于这个题的背景,应该多看看jeff的 windows via c++
发表于 2016-12-04 16:18:10 回复(0)