问题来源TSU
2011年11月28日
pthread_testcancel();
retcode = read(fd, buffer, length);
pthread_testcancel();
老大这种写的目的是什么?
为什么前后都写pthread_testcancel();
21:47:08
总算有人发现了这些东西了。
OpenTSU-cooben() 21:48:31
这个函数的作用是设置线程退出的位置,当你杀死线程的时候,它会尝试从这些位置退出,以保证程序逻辑的正确行。
OpenTSU-cooben(000) 21:50:47
中间那个函数的执行是不可打断的,被打断的话就内存泄漏了。
V() 21:52:37
线程库 OnStart
OpenTSU-cooben() 21:55:34
实际上让你们学写一个线程库,还有一个更重大的目的,就是让你们掌握跨平台线程库pThreads的用法。
你真正会的东西越多,将来你才越值钱。
V() 22:07:38
中间那个函数的执行是不可打断的,被打断的话就内存泄漏了。
那2个线程切换执行的时候。中间的函数不就有可能被打断了
OpenTSU-cooben() 22:09:21
呵呵,你理解错误了。跟大多数学多线程的人一样。
OpenTSU-cooben() 22:10:36
每个线程都有一个自己独立的栈空间,即使N个线程在同一时刻调用了同一个线程回调函数,其执行过程分别都在自己的栈空间上,它们之间没有任何交叉的关系。
V() 22:10:43
如果不设置这个pthread_testcancel(); 退出位置可能有哪些?
没这个会有什么不良后果
OpenTSU-cooben() 22:12:29
想知道这些详细的信息,恐怕你得google下pThreads库的这个函数了。
这些函数出现在程序员认为最理想的地方,可以让线程退出得更加迅速,同时也让程序更加健壮。
V() 22:15:41
如果不设置这个pthread_testcancel(); 退出位置可能有哪些?随机位置?
OpenTSU-cooben() 22:15:56
一般的都是Sleep()函数。
V() 22:16:08
没这个会有什么不良后果
OpenTSU-cooben() 22:16:44
还有一些pThreads库说明中提到的函数。我没有记录过。你可以查看它的官方文档。
线程结束时间较长。
V() 22:18:10
那你认为我们初学使用这些函数时会出现什么问题
你初学时犯过什么问题
OpenTSU-cooben() 22:19:05
我也不知道,等你遇到了再说。问题自然会找到你。发现一个解决一个。
V->不要老是问我如何如何,你更多的关心自己就好了。
V() 22:22:23
如果不设置这个pthread_testcancel();退出位置可能有哪些?一般的都是Sleep()函数。。。。。那么我杀死线程 那线程是是从回调函数return那结束?
OpenTSU-cooben() 22:23:37
在Win32线程中是从线程当前执行位置结束。
pThreads库中是从可退出点,比如Sleep()位置结束,它不会再执行到return语句。
OpenTSU-cooben() 22:33:13
我希望你们能够明白,现阶段你们学知识只要掌握最正确的基本用法就行了。千万不要研究得太深,那样你们将没有足够的时间学完更多的东西。点到为止就好!这是我的忠告!
V() 22:43:34
恩
OpenTSU-cooben() 22:46:17
编程的知识实在是太过庞大,但是工作中所用到的却是涉及非常多的方面,学会快速掌握大量知识的技能是必不可少的。
希望大家继续努力学习!
V() 22:48:02
中间那个函数的执行是不可打断的,被打断的话就内存泄漏了。什么时候被打断?
OpenTSU-cooben() 22:50:25
强制终止线程的时候,就会被打断。
OpenTSU-cooben() 22:53:18
你不明白这个知识,就先放弃它,我重写第1季教程的时候会实现Win32线程对象,那时再给你解释TerminateThread()可能引发的问题。
V() 22:54:08
恩
OpenTSU-cooben() 22:56:43
我先给你说一个情形:必须在线程中调用一个Func()函数,这个函数中存在:
p = new char[1024];
... //内存泄漏。
2011年11月28日
pthread_testcancel();
retcode = read(fd, buffer, length);
pthread_testcancel();
老大这种写的目的是什么?
为什么前后都写pthread_testcancel();
21:47:08
总算有人发现了这些东西了。
OpenTSU-cooben() 21:48:31
这个函数的作用是设置线程退出的位置,当你杀死线程的时候,它会尝试从这些位置退出,以保证程序逻辑的正确行。
OpenTSU-cooben(000) 21:50:47
中间那个函数的执行是不可打断的,被打断的话就内存泄漏了。
V() 21:52:37
线程库 OnStart
OpenTSU-cooben() 21:55:34
实际上让你们学写一个线程库,还有一个更重大的目的,就是让你们掌握跨平台线程库pThreads的用法。
你真正会的东西越多,将来你才越值钱。
V() 22:07:38
中间那个函数的执行是不可打断的,被打断的话就内存泄漏了。
那2个线程切换执行的时候。中间的函数不就有可能被打断了
OpenTSU-cooben() 22:09:21
呵呵,你理解错误了。跟大多数学多线程的人一样。
OpenTSU-cooben() 22:10:36
每个线程都有一个自己独立的栈空间,即使N个线程在同一时刻调用了同一个线程回调函数,其执行过程分别都在自己的栈空间上,它们之间没有任何交叉的关系。
V() 22:10:43
如果不设置这个pthread_testcancel(); 退出位置可能有哪些?
没这个会有什么不良后果
OpenTSU-cooben() 22:12:29
想知道这些详细的信息,恐怕你得google下pThreads库的这个函数了。
这些函数出现在程序员认为最理想的地方,可以让线程退出得更加迅速,同时也让程序更加健壮。
V() 22:15:41
如果不设置这个pthread_testcancel(); 退出位置可能有哪些?随机位置?
OpenTSU-cooben() 22:15:56
一般的都是Sleep()函数。
V() 22:16:08
没这个会有什么不良后果
OpenTSU-cooben() 22:16:44
还有一些pThreads库说明中提到的函数。我没有记录过。你可以查看它的官方文档。
线程结束时间较长。
V() 22:18:10
那你认为我们初学使用这些函数时会出现什么问题
你初学时犯过什么问题
OpenTSU-cooben() 22:19:05
我也不知道,等你遇到了再说。问题自然会找到你。发现一个解决一个。
V->不要老是问我如何如何,你更多的关心自己就好了。
V() 22:22:23
如果不设置这个pthread_testcancel();退出位置可能有哪些?一般的都是Sleep()函数。。。。。那么我杀死线程 那线程是是从回调函数return那结束?
OpenTSU-cooben() 22:23:37
在Win32线程中是从线程当前执行位置结束。
pThreads库中是从可退出点,比如Sleep()位置结束,它不会再执行到return语句。
OpenTSU-cooben() 22:33:13
我希望你们能够明白,现阶段你们学知识只要掌握最正确的基本用法就行了。千万不要研究得太深,那样你们将没有足够的时间学完更多的东西。点到为止就好!这是我的忠告!
V() 22:43:34
恩
OpenTSU-cooben() 22:46:17
编程的知识实在是太过庞大,但是工作中所用到的却是涉及非常多的方面,学会快速掌握大量知识的技能是必不可少的。
希望大家继续努力学习!
V() 22:48:02
中间那个函数的执行是不可打断的,被打断的话就内存泄漏了。什么时候被打断?
OpenTSU-cooben() 22:50:25
强制终止线程的时候,就会被打断。
OpenTSU-cooben() 22:53:18
你不明白这个知识,就先放弃它,我重写第1季教程的时候会实现Win32线程对象,那时再给你解释TerminateThread()可能引发的问题。
V() 22:54:08
恩
OpenTSU-cooben() 22:56:43
我先给你说一个情形:必须在线程中调用一个Func()函数,这个函数中存在:
p = new char[1024];
... //内存泄漏。