F i r s t T h r e a d可以在S e c o n d T h r e a d将5分配给F i r s t T h r e a d的x之前结束它的
操作。如果出现这种情况,S e c o n d T h r e a d将不知道F i r s t T h r e a d已经不再存在,并且仍然试图修改
现在已经是个无效地址的内容。这会导致S e c o n d T h r e a d产生一次访问违规,因为F i r s t T h r e a d的堆
栈已经在F i r s t T h r e a d终止运行时被撤消。解决这个问题的方法之一是将x声明为一个静态变量,
这样,编译器就为应用程序的数据部分中的x创建一个存储区,而不是在堆栈上创建存储区。
但是这使得函数成为不可重新进入的函数。换句话说,无法创建两个执行相同函数的线程,
因为两个线程将共享该静态变量。解决这个问题(和它的更复杂的变形)的另一种方法是使用
正确的线程同步技术(第8、9章和1 0章介绍)。
F i r s t T h r e a d可以在S e c o n d T h r e a d将5分配给F i r s t T h r e a d的x之前结束它的 操作
转载
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
_ b e g i n t h r e a d e x函数与C r e a t e T h r e a d函数
若要使
c 多线程 编译器 编程 数据结构