乙個巨坑,多執行緒中靜態變數的錯誤使用問題

2021-10-18 19:23:28 字數 524 閱讀 2626

分析發現,只要開啟兩路以上均會出現花屏,說明確實不是gpu解碼能力的問題;

猜測是多執行緒開啟同乙個檔案,加鎖之後,讀取資料緩慢,導致幀資料不連續導致,於是將h264檔案複製了16份,分別開啟,但是問題依然存在;派出了讀檔案的問題;

發現渲染的時候gpu的3d資源占用較多,大概80%左右,猜想是不是因為渲染重新整理率太快導致,於是修改渲染**,修改重新整理路為30fps, 25fps, 20fps, 15fps,……5fps,,結果還是不行,排除渲染重新整理率太快問題;

實在不清楚問題到底出在了**,於是乾脆想著多跑幾個小時看不會不會崩潰,果然執行了2個小時之後,系統崩潰在讀取檔案的藉口內部;開啟介面(這部分介面是其他同事提供的)發現,介面內部的讀取字元的計數使用的是靜態變數,我去當場暈倒……

介面內部使用靜態變數,該介面被多執行緒呼叫,會出現多個執行緒改區域性變數初始值不同的情況,所以導致讀檔案的位元組數出現錯誤,導致讀取的原始資料存在缺失,造成花屏的現象。靜態變數在多執行緒內部是共享的,所以多執行緒中謹慎使用靜態變數。

關於 和靜態變數的乙個題

關於 和靜態變數的乙個題 count 是靜態變數,為所有物件共享,因此不管a.increment 還是b.increment 都會使count持續增加。increment 返回當前count值,然後count增加1,anotherincrement 方法讓count增加1,然後返回值。author ...

記錄乙個C 靜態變數的問題

本來想寫乙個日誌類,初始化是獲取streamwriter,然後記錄日誌時write,flush,這樣可以避免重複開啟檔案,可是streamwriter莫名其妙變成null了,於是寫了乙個簡單的測試demo using system using system.diagnostics using sys...

乙個類成員函式的區域性靜態變數問題

原文 當時遇到的需求需要這樣處理 呼叫某個類物件的某個成員函式時,第一次有具體意義的,其他時候都是保持不變的 無意義的。這個需求可以看做是在呼叫某成員函式時,第一次進行初始化,其他時候不進行操作,即在首次呼叫時進行初始化,根據這點,很容易想到c c 裡面的static變數,它的作用是保持變數內容的持...