1樓:
如果共享某種複雜的資料結構,要保證資料正確性就要加鎖。只是讀取的話沒什麼大問題,如果有資料寫入操作,不加鎖兩邊同時寫入可能會破壞資料。
2樓:很努力推進會
你自己試一下不就知道了 別人說的不一定對 不要什麼都拿來問。
c++類的靜態成員,在多執行緒訪問時需要加保護嗎?
3樓:匿名使用者
在多執行緒中使用同一個靜態方法時,每個執行緒使用各自的例項欄位(instance field)的副本,而共享一個靜態欄位(static
field)。所以說,如果該靜態方法不去操作一個靜態成員,只在方法內部使用例項欄位(instance
field),不會引起安全性問題。但是,如果該靜態方法操作了一個靜態欄位,則需要靜態方法中採用互斥訪問的方式進行安全處理。
c++物件導向的靜態函式問題,我一直改來改去都不行,求大神求助。
4樓:
第一個錯誤: 請把int student::count=0 的int去掉(後面的float也是如此),靜態變數不能重新定義型別。
第二個錯誤:由於你的兩個靜態變數全都是私有成員,因此在全域性main函式中使用該成員值屬於越權訪問。建議最後那個輸出資訊不要寫在全域性main函式中,在類裡面的public塊寫一靜態函式輸出,然後在全域性main函式中呼叫該靜態函式。
另外,由於你在類外面(全域性範圍)使用了student::count=0等語句,也屬於越權訪問,請把這兩條賦值寫在類裡面(如把static int count 改成 static int count=0),類外面那兩條語句建議去掉。當然,你如果不想按我建議的方式去改,那就請把那兩個靜態變數定義到public塊去吧。
5樓:網友
貼的這麼亂,你報什麼錯。
c++ãæïò¶ôïó¶àïß³ì±à³ì
c++多執行緒呼叫同一個函式,怎麼對函式加鎖
6樓:匿名使用者
windows直接開臨界區linux上mutexc++11用庫函式。
c++ 全域性靜態函式的理解 10
7樓:匿名使用者
靜態函式具我所知是放在堆中,具體放在了data資料區段;和全域性資料區段一個位置;
他沒有了this指標;這是c++語言的一個特性,他在編譯期被參考的是類,作為「型別」的偏移;
物件的訪問僅僅只是語法上的一種便利;
在多執行緒情況下,靜態方法需要進行資料保護,存在同時存訪的風險lishimin1972 回答是對的,函式應該是放在text段,變數和資料才放在data段。
8樓:網友
其實優劣都是看使用情形的;
一般來說,c++是物件導向的(),全域性性的一般少用,因為它雖然「方便」——可以在整個工程內,任何地方使用,但同時意味著它可能被濫用,如果碰上多執行緒,如果保護不好,容易產生衝突意外;其**空間、甚至包含資料,應該是在堆裡的。
9樓:網友
和c語言靜態函式一樣,或者你就可以理解為c語言的靜態函式。存放在堆裡面。
10樓:匿名使用者
就是本地私用的意思~
不支援跨檔案呼叫 ——執行時不會涉及到與其它類別函式有所區別吧?
c++中定義在類內的成員函式呼叫外部函式還是inline的嗎?
11樓:崊陂咭溮鈸
說一個函式是inline的,是說它會被在(其他函式里)呼叫它的地方,而不是這個函式內對其他函式的呼叫。
php物件導向 靜態屬性為什麼能用物件訪問
static關鍵字。宣告類成員或方法為static,就可以不例項化類而直接訪問。不能通過一個物件來訪問其中的靜態成員 靜態方法除外 由於靜態方法不需要通過物件即可呼叫,所以偽變數 this在靜態方法中不可用。靜態屬性不可以由物件通過 操作符來訪問。用 方式呼叫一個非靜態方法會導致一個e strict...
php物件物件傳入函式問題,php 物件導向 new一個物件,一般在函式裡。能不能提出來。
不二進位制 函式在呼叫的時候,引數會被重新開闢記憶體空間的。也就是說 你傳值穿的是 p1,但在函式test執行的時候會另開闢一個空間,複製一遍 p1,之後再函式中操作的記憶體都是這個函式新開闢的空間。在這個函式test消亡的時候,這個空間被釋放。所以說你這個根本就沒有修改了 p1的值,只是複製了一遍...
C語言的程序導向和C 的物件導向分別是什麼意思
司馬刀劍 c 和c的差別還是比較多的。初學的話,可以認為c 是c的超集,除了支援c的程序導向,還支援物件導向程式設計。程序導向就是以過程為中心的程式設計思想。分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候一個一個依次呼叫就可以了。以公共汽車為例,在程序導向的思想裡,汽車啟動...