程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 局部靜態變量的多線程問題

局部靜態變量的多線程問題

編輯:C++入門知識


靜態局部變量實在第一次訪問的時候進行初始化的,先來看下初始化的過程

class base
{
public:
	base(){}
};

void fn()
{
	static base t;
}

首先定義一個類; 初始化過程的匯編

\


首先取出一個值和1進行比較 ,如果不等把1 復制給這個地址 然後調用base的構造函數進行初始化

根據上下文 可以理解 其實這個地址就是來標記該靜態變量是否進行過初始化,如果沒有置為1,然戶進行初始化。如果為1,則跳過初始化。


下面考慮多線程的環境當線程1 在賦值標志位之前判斷標志位之後,切換到線程2,線程2也會判斷為未初始化,則 這種情況下base會初始化兩次,考慮一種情況,如果構造函數裡有申請內存的操作則析構時只會析構後者。會造成內存洩露~ 所以多線程的局部靜態變量的初始化也是不安全的~



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved