青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

飯中淹的避難所~~~~~

偶爾來避難的地方~

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  94 隨筆 :: 0 文章 :: 257 評論 :: 0 Trackbacks
共3頁: 1 2 3 
@cpm
另外,我準備用barrier來代替volatile,從而讓所有的讀寫操作都能夠被優化,并且,還能夠獲得及時的更新。
@cpm
在這里,我說的是個多線程通信問題,它的單個任務是線性的。
我認為:

所有的多線程問題都可以細分為單個線性任務。

不能細分為線性任務的問題,是不存在的。

鎖是不可避免的,就算是狀態也是一種鎖。

這里的無鎖,就是不用系統提供的鎖。

無論是什么多線程問題,鎖都是保證線性任務線性執行的。

所以沒有你說的不能簡化為單線程的問題。

@cpm
代碼中的賦值是在一起的,而且是對不同的變量,所以他們可能會被亂序執行。這樣另一個線程獲取到通過狀態后,可能這時候其他的寫操作還沒有執行完。就會出問題。

所以在修改狀態前,要用一個寫barrier來過濾掉其他寫操作的reorder,從而實現修改狀態時,所有寫操作都完成。


另外,關于例程的代碼,只是做分析用。實際使用時,還是得用一些手段來讓系統對線程進行調度。這個是最基本的常識。
@shbooom
不是locked,是dosomething.
線程A
if(doSomething==true) { DoSomething(); doSomething=false;}

線程B
if(doSomething==false) { DoOtherthing(); doSomething=true;}

在A線程DoSomething()時,B線程進不去判斷,所以不會用DoOtherthing()來干擾。

或者就按照你的locked
修改成這樣
線程A
if(locked==false) { doSomething(); locked=true;}
線程B
if(locked) { doOtherthing(); locked = false;}

在A的花括號內,B的doOtherthing不會影響A的doSomething。





@fcc
確實是存在這種情況。
@shbooom
如果不考慮優化,還是可以用的,這個方法。

@Kevin Lynx
p的地址大于a。
所以a在棧頂,p在a下面。還有個push ebp,接下來就是返回地址。
正好三個。
re: 無鎖線程通信(1) 飯中淹 2010-05-06 15:13
@cppexplore
本篇文章序號(1)
1- CALL會把下一個指令的地址放進堆棧。
2- RET就讓這個地址出棧,并跳轉至這個地址。
3- 局部變量也是在棧上的。

代碼中,你用局部變量的地址定位到棧內的ret返回地址,然后將其修改為TEST的函數地址。RET后,就跳轉到TEST函數了。因為沒有CALL,所以棧內不會壓入返回地址,然后棧就亂掉了,后面依賴棧的指令,就可能會導致出錯。

在一些軟件保護里面,經常會用到這種手段,PUSH FUNCPTR, RET。這樣可以用CALL來調用函數。從而迷惑分析者。通過ESP寄存器直接操作,更讓分析者頭大。再用一些無效指令插在其中,做成花指令,就更高端了。特別是花連跳,分析者就很難一眼分辨出走向了。

re: 無鎖線程通信(1) 飯中淹 2010-05-06 12:13
@愛飯盒
請你認真看清楚,我就不解釋了。
re: 無鎖線程通信(1) 飯中淹 2010-05-06 10:32
@fcc
無鎖編程確實沒有這么簡單。
這個例子,你仔細看每一句話,其實說的是你第二種方法。也就是互相等待的方法。低效是肯定的。
這個是第一部分,從簡單的開始說起,慢慢的深入進去。
@陳梓瀚(vczh)
是的。
我這里描述的就是服務器在更新物件是否顯示時,對大物件的處理。實際上物件的資源都在客戶端。服務器只是讓客戶端顯示或者不顯示而已。
后面說的,關于客戶端和服務器端在結構上的統一,是可以實現一個交互性更強的世界。比如一個完全由星球和飛船組成的世界。各部分都在靠近或者遠離。
@陳昱(CY)
是的,是服務器傳給客戶端顯示的物體。
單足,就是只用一組坐標進行可見性檢查。
多足,就是有多組坐標用于可見性的檢查,只要一組坐標在可見范圍內,就認為是可見。
re: 無鎖線程通信(1) 飯中淹 2010-05-05 21:05
@shbooom
不會,這是絕對安全的。
檢查成功后,置位權就在自己手中了,所以不存在不安全的情況。
@陳昱(CY)
你沒看明白。。。。
@金慶
列舉過程消耗太大。
re: 用于UI系統中的腳本接口 飯中淹 2010-04-28 19:37
@ccsdu2009
是的。
但是這個是腳本系統接口,用來處理UI事件的。實現UI和主程序之間的粘合。
我一般會用一種類似工廠的方法。

class CPeople
{

int m_iAge;

CPeople() : m_iAge(-1) {}
~CPeople() {}
bool _Init( int iAge )
{
if( iAge <= 0 || iAge > 200 )return false;
m_iAge = iAge;
return true;
}
public:
static CPeople * Create( int iAge )
{
CPeople * people = new CPeople();
if( people != NULL &&
!people->_Init(iAge) )
{
people->Release();
people = NULL;
}
return people;
}
void Release() { delete this;}
};


私有的構造函數和西狗函數確保他們不能被單獨分配和刪除
所有的途徑只有create和release。

re: WOF(名將三國)的TGL文件格式 飯中淹 2010-02-21 17:37
@菜鳥
使用ZLIB解壓
@金慶
局域網內還是可以的。
怎么開始像C ++ BUILDER了= =
re: 服務器程序運行時邏輯替換 飯中淹 2010-02-15 17:41
@金慶
我是以對象為單位的替換。只要接口不修改,以及狀態拷貝正確,替換還是很簡單的。
@馴鹿
那要知道各個字段的意思了,有些字段需要逆向才行。
不想去破解那么深入。能看到圖就好了。
re: WOF(名將三國)的TGL文件格式 飯中淹 2010-01-27 08:28
@求助
如果要逆向就不破了,那是違反用戶協議的
re: WOF(名將三國)的TGL文件格式 飯中淹 2010-01-25 17:53
@Kevin Lynx
有使用方法- -
你看漏了
re: WOF(名將三國)的TGL文件格式 飯中淹 2010-01-25 13:45
下期預告:WOF(名將三國)MOTIONDATA中的PKX文件的解析
new分配的在堆里,你溢出了,只會導致堆出問題。而你下面又沒有再使用堆,所以不會出錯。
直接寫的局部變量,分配在堆棧里,堆棧里有函數的返回地址,所以溢出了,覆蓋了返回地址,函數執行完就出錯了。
另外,有些 編譯器會生成對固定長度數組的保護性檢測代碼,一旦溢出,就會彈出提示。早先在vs2003還是vs2002的時候見過。
很好!!!!!!!!!
@oldtom
暫時不開,未來會開
re: Autotools初體驗 飯中淹 2009-12-24 10:31
這個相對于IDE來說,有什么優勢?
re: 二分查找學習札記 飯中淹 2009-10-09 10:07
查找i*10的結果是:

t1 = 1159
t2 = 1160
t3 = 1515

你的算法的消耗時間仍然多幾百毫秒

re: 二分查找學習札記 飯中淹 2009-10-09 10:03
@那誰
我是這樣測試的,不知道有么有錯。
第一步:將你的算法嵌入到我的binarysearch里面
static inline int _search( const T1 * pTArray, int nArraySize, const T2 & v, int & insertpoint )
{
if( pTArray == NULL )
{
insertpoint = 0;
return -1;
}

int left, right, middle;

left = -1, right = nArraySize;

while (left + 1 != right)
{
middle = left + (right-left) / 2;

if (_cmp( pTArray[middle], v ) < 0)
{
left = middle;
}
else
{
right = middle;
}
}

if (right >= nArraySize || _cmp( pTArray[right], v ) != 0)
{
right = -1;
}

return right;
//}

}
第二步:測試函數
#define MAX_DATA_COUNT 100000
int gDatas[MAX_DATA_COUNT];
#define MAX_FIND_DATA_COUNT 10000
int gFindDatas[MAX_FIND_DATA_COUNT];
#define MAX_TEST_TIMES 1000
void Test1()
{
typedef xbinary_search<int, int> INT_SEARCH;
for( int t = 0;t < MAX_TEST_TIMES; ++t )
{
for( int i = 0;i < MAX_FIND_DATA_COUNT; ++i )
{
int nPos = INT_SEARCH::search_value( gDatas, MAX_DATA_COUNT, gFindDatas[i] );
if( nPos != gFindDatas[i] )printf( "error !\n" );
}
}
}

void Test2()
{
typedef xbinary_search2<int, int> INT_SEARCH;
for( int t = 0;t < MAX_TEST_TIMES; ++t )
{
for( int i = 0;i < MAX_FIND_DATA_COUNT; ++i )
{
int nPos = INT_SEARCH::search_value( gDatas, MAX_DATA_COUNT, gFindDatas[i] );
if( nPos != gFindDatas[i] )printf( "error !\n" );
}
}
}

void Test3()
{
typedef xbinary_search3<int, int> INT_SEARCH;
for( int t = 0;t < MAX_TEST_TIMES; ++t )
{
for( int i = 0;i < MAX_FIND_DATA_COUNT; ++i )
{
int nPos = INT_SEARCH::search_value( gDatas, MAX_DATA_COUNT, gFindDatas[i] );
if( nPos != gFindDatas[i] )printf( "error !\n" );
}
}
}

xbinary_search3就是你的函數嵌入的

第三步:數據生成和測試代碼
srand( 312431 );
for( int i = 0;i < MAX_DATA_COUNT; ++i )
{
gDatas[i] = i;
}

for( int i = 0;i < MAX_FIND_DATA_COUNT; ++i )
{
gFindDatas[i] = (rand() % 10000) * MAX_DATA_COUNT / 10000;
}
timeBeginPeriod(1);
DWORD dwT1 = timeGetTime();
Test1();
dwT1 = timeGetTime() - dwT1;
printf( "t1 = %u\n", dwT1 );
DWORD dwT2 = timeGetTime();
Test2();
dwT2 = timeGetTime() - dwT2;
printf( "t2 = %u\n", dwT2 );
DWORD dwT3 = timeGetTime();
Test3();
dwT3 = timeGetTime() - dwT3;
printf( "t3 = %u\n", dwT3 );
timeEndPeriod(1);

最后結果


t1 = 1828
t2 = 1822
t3 = 2155


re: 二分查找學習札記 飯中淹 2009-10-08 07:51
@那誰
大量隨機數值的查找。
用我自己的二分算法和最后的算法進行比較測試。

結果是最后的算法比我的算法慢個幾百毫秒。

是10萬int數組,1萬預生成的待查數據。

重復1000次后得出的時間。
我的算法大概是1.8S
你文中的算法是2.XS
RELEASE版,在2.6GHZ的INTEL CPU上。

為了排除緩沖區干擾等,我用自己的算法的變種進行過測試,相差不到10毫秒。



re: 二分查找學習札記 飯中淹 2009-10-07 10:31
測試了下。。。。最后的代碼效率不高。
re: 基類角色之對象管理器 飯中淹 2009-07-03 10:18
@李現民
確實是類似觀察者這種,不過更直接了
re: 基類角色之對象管理器 飯中淹 2009-07-03 10:16
@Kevin Lynx
跟這個差不多。不過不用繼承

xLink<Host, Target>


xLink.link( xLink<Target, Host> & lnk );
xLink.disLinkAll();

*
&
是重載的。
返回Host
re: 基類角色之對象管理器 飯中淹 2009-07-02 15:20
我一般是用一個ID管理器來解決這個問題。
采用直接索引的辦法。對于重復的ID使用一個順序增加的KEY來做驗證。

也就是一個ID,一個KEY來索引一個對象。

之前還有一個方法,就是采用一種LINK對象,LINK對象能鏈接到另外一個LINK對象,并互換HOST指針,并且有主從關系的LINK方式。
當一個LINK對象銷毀的時候,會通知所有已經連接的LINK對象放棄自己的HOST指針。這樣的話,別的對象里面保存的指針會隨著原始對象的銷毀而自動清空。
用小方格子來拼成六邊形,然后通過查表方式來進行坐標轉換。
@陳梓瀚(vczh)
有眉目了!
OFFICEXP之后,MS出了個叫做TEXT SERVICE FRAMEWORK的東西。而微軟拼音就是用這個TSF開發的。要完美支持微軟拼音就需要用這個東西來對輸入法進行操作。
研究TSF中。。。。
re: Charlib更新Vector和Matrix... 飯中淹 2009-03-10 13:28
超市特工。。。。
re: 重載分配符. 飯中淹 2009-03-02 16:43
玩。。。。。。
re: 帶括號浮點型計算器final 飯中淹 2009-02-19 09:11
不用爭取了,你已經是了.
這個,太簡陋了,就是一些字體相關的東西...
看看API幫助就會寫了.
你可以測試下,在不同的cpp里面輸出這個變量的地址,就什么都清楚了。

re: 能用于 VC6 的 CImage 類 飯中淹 2009-01-08 17:18
用VC6的理由有點牽強。。。
re: 面試在華為 飯中淹 2008-12-18 18:16
他們估計是去掉最好的,去掉最差的,保留中間的。
這個有什么優勢?
可以用保護線程
把崩潰的信息記錄下來,順便把未保存的數據保存下
re: 文件夾比較備份工具 飯中淹 2008-11-07 09:14
博主的意思是不比較文件名,直接用md5互相比較,找出某一方沒有,而另一方有的md5。這樣就算修改了名字也不會有問題。

不過有一個問題需要考慮,如何避免垃圾文件,比如一方修改了名字也修改了內容的。這樣同樣意義的文件就出現了兩個。


做一個功能
直接打
/名字 內容
就可以給好友發送消息

不管他是gtalk的,msn的,還是qq的
共3頁: 1 2 3 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产在线播放一区二区三区| 国产精品亚洲第一区在线暖暖韩国| 国产亚洲欧美一区二区三区| 欧美中文字幕在线| 欧美一区二视频在线免费观看| 国产伦理一区| 美女主播精品视频一二三四| 欧美刺激午夜性久久久久久久| 亚洲精品久久在线| 亚洲精品一品区二品区三品区| 国产精品国产三级国产a| 香蕉成人伊视频在线观看| 久久福利视频导航| 亚洲精品中文字| 亚洲欧美日韩国产成人精品影院| 国产亚洲亚洲| 亚洲人成在线播放| 国产精品ⅴa在线观看h| 老鸭窝91久久精品色噜噜导演| 欧美a级在线| 欧美在线观看www| 久久综合伊人77777| 亚洲一级网站| 久色成人在线| 性一交一乱一区二区洋洋av| 男人插女人欧美| 午夜在线电影亚洲一区| 免费看黄裸体一级大秀欧美| 午夜精品国产| 欧美大成色www永久网站婷| 亚洲欧美在线免费观看| 欧美a级大片| 久久综合五月| 国产欧美日韩在线| 亚洲日本电影在线| 在线观看日韩av电影| 一区二区不卡在线视频 午夜欧美不卡在| 欧美日韩精品久久| 久久夜色精品国产亚洲aⅴ| 欧美日韩在线一区| 欧美激情视频在线播放| 国产亚洲aⅴaaaaaa毛片| 99国内精品久久| 亚洲欧洲在线一区| 欧美在线观看一二区| 亚洲永久免费av| 欧美日韩1080p| 欧美激情视频在线播放| 极品少妇一区二区三区精品视频| 亚洲一区二区在线播放| 亚洲私人黄色宅男| 欧美成人精品| 亚洲大片精品永久免费| 伊人狠狠色j香婷婷综合| 亚洲欧洲99久久| 欧美一区二区三区在线| 国产精品二区二区三区| 日韩视频―中文字幕| 亚洲久久一区| 欧美激情影音先锋| 最近看过的日韩成人| 亚洲日本视频| 欧美人与禽性xxxxx杂性| 91久久夜色精品国产九色| 亚洲精品国精品久久99热| 久久亚洲国产成人| 欧美成人免费小视频| 亚洲国产裸拍裸体视频在线观看乱了| 久久精品国产综合精品| 猛干欧美女孩| 亚洲伦理精品| 欧美日韩在线播放三区| 在线中文字幕一区| 先锋影音久久久| 国内成人精品2018免费看| 久久久久国产精品午夜一区| 美女诱惑黄网站一区| 91久久久一线二线三线品牌| 欧美激情小视频| 99re6热在线精品视频播放速度| 亚洲午夜精品网| 国产日韩欧美综合| 久久午夜激情| 日韩午夜黄色| 欧美专区在线| 亚洲福利视频三区| 欧美日韩免费观看一区二区三区| 亚洲制服少妇| 女同性一区二区三区人了人一| 亚洲精品中文字| 国产精品夜色7777狼人| 久久久九九九九| 日韩视频在线一区| 久久久久99| 在线午夜精品自拍| 国内精品免费在线观看| 欧美成人综合在线| 亚洲欧美在线观看| 91久久精品美女| 久久久久9999亚洲精品| 亚洲娇小video精品| 国产精品久久久久久久午夜 | 中文亚洲免费| 国模叶桐国产精品一区| 久久久久久高潮国产精品视| 国产麻豆午夜三级精品| 久久av二区| 在线视频你懂得一区| 免费成人高清在线视频| 校园激情久久| 一区二区三区福利| 在线日韩精品视频| 国产美女在线精品免费观看| 欧美激情一区二区三区蜜桃视频 | 久久人人看视频| 亚洲小说春色综合另类电影| 亚洲电影网站| 国产亚洲精品久久飘花 | 久久另类ts人妖一区二区| 亚洲一区二区黄色| 亚洲美女视频在线免费观看| 欧美成人激情在线| 久久人人爽人人| 久久精品导航| 欧美在线91| 午夜精品久久久久久久99水蜜桃| 亚洲美女色禁图| 亚洲激情视频在线| 亚洲电影在线免费观看| 狠狠色2019综合网| 国产亚洲欧美一区| 国产欧美在线播放| 国产精品一国产精品k频道56| 欧美日韩在线一区二区三区| 欧美理论电影网| 欧美人与性动交a欧美精品| 欧美激情乱人伦| 欧美激情综合在线| 欧美激情精品久久久久| 欧美精品久久久久a| 欧美精彩视频一区二区三区| 欧美激情成人在线| 欧美日本久久| 国产精品激情偷乱一区二区∴| 欧美午夜精品伦理| 欧美视频一区二区三区在线观看| 欧美体内she精视频| 欧美午夜不卡视频| 国产精品久久久久久一区二区三区| 欧美视频一区二区三区在线观看| 欧美午夜精品久久久久久浪潮| 欧美日韩一区二区在线播放| 欧美视频二区| 国产亚洲观看| 亚洲国产精品成人精品| 亚洲精品综合精品自拍| 亚洲午夜视频在线观看| 欧美一级一区| 美女脱光内衣内裤视频久久网站| 欧美成人资源网| 日韩香蕉视频| 欧美一区二区三区免费观看视频| 久久国产一区| 欧美激情在线免费观看| 欧美色另类天堂2015| 国模一区二区三区| 亚洲精选一区二区| 先锋影音久久久| 欧美成人午夜剧场免费观看| 亚洲精品久久久久久下一站| 亚洲视频免费观看| 久久久久久久91| 欧美色欧美亚洲另类七区| 国产一区二区三区久久久| 日韩视频在线一区二区| 久久xxxx| 亚洲激情一区二区| 午夜久久久久久久久久一区二区| 玖玖精品视频| 国产欧美一区二区三区在线老狼| 亚洲日本中文字幕区| 性做久久久久久| 亚洲日韩欧美视频一区| 欧美色图一区二区三区| 亚洲一区影院| 久久频这里精品99香蕉| 日韩午夜在线| 久热国产精品| 国产麻豆精品视频| 日韩视频在线观看国产| 久久夜色精品国产| 亚洲性人人天天夜夜摸| 男女av一区三区二区色多| 国产欧美日韩伦理| 中文久久精品| 亚洲激情电影在线| 久久久人人人| 国产有码在线一区二区视频| 亚洲午夜黄色| 91久久精品一区|