亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 5635 | 回復(fù): 8
打印 上一主題 下一主題

[FastDFS] fastdfs的api是多線程和多進(jìn)程安全嗎? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-10-10 14:03 |只看該作者 |倒序瀏覽
目前使用c的api,在處理用戶并發(fā)訪問時,想跟作者確認(rèn)一下api是否多線程和多進(jìn)程安全,多謝!

g_tracker_servers是個全局變量,客戶端和Storage都用到,客戶端應(yīng)該非線程安全吧?像函數(shù):
tracker_get_connection
tracker_get_connection_ex
所有訪問g_tracker_servers的地方都應(yīng)該加鎖。

[ 本帖最后由 happy_fastdfs 于 2009-10-10 16:05 編輯 ]

論壇徽章:
4
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT運維版塊每日發(fā)帖之星
日期:2016-08-11 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-08-15 06:20:00
2 [報告]
發(fā)表于 2009-10-10 16:47 |只看該作者

回復(fù) #1 happy_fastdfs 的帖子

可以做到多線程安全。
加鎖是一種做法,但不建議這么用,因為會導(dǎo)致堵塞和等待,效率很差。
建議每個線程使用自己的tracker server,不要使用全局的。
比如:
TrackerServerInfo tracker_server;
if (tracker_get_connection_ex(&tracker_server) != 0)
{
     //連接tracker server失!
}

論壇徽章:
0
3 [報告]
發(fā)表于 2009-10-12 09:59 |只看該作者

這個函數(shù)也不是線程安全的

tracker_get_connection_ex函數(shù)
        pCurrentServer = g_tracker_servers + g_tracker_server_index;//線程A 根據(jù)g_tracker_server_index memcpy出最后這個tracker結(jié)構(gòu)體時,線程B剛好將g_tracker_server_index++到越界位置,memcpy時會越界訪問。
        memcpy(pTrackerServer, pCurrentServer, sizeof(TrackerServerInfo));
        pTrackerServer->sock = -1;
        if (tracker_connect_server(pTrackerServer) == 0)
        {
                g_tracker_server_index++;//線程B剛好將g_tracker_server_index++到越界位置
                if (g_tracker_server_index >= g_tracker_server_count)
                {
                        g_tracker_server_index = 0;
                }
                return 0;
        }
所以后面版本看看能不能實現(xiàn)幾個不使用全局變量g_tracker_servers和 g_tracker_server_index的tracker連接管理函數(shù)?梢园雅渲梦募械膖racker列表讀到全局變量中,因為運行時只讀,然后每個線程get connection時從全局配置中讀出各個tracker的ip和port,構(gòu)建線程自己的tracker_servers。

搜索代碼看到應(yīng)該是Storage也用到全局變量g_tracker_servers,幸好Storage需要重啟才會改變g_tracker_server_count,看來server在運行時沒發(fā)現(xiàn)線程安全問題。

我的理解對不?

論壇徽章:
4
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT運維版塊每日發(fā)帖之星
日期:2016-08-11 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-08-15 06:20:00
4 [報告]
發(fā)表于 2009-10-12 21:25 |只看該作者

回復(fù) #3 happy_fastdfs 的帖子

的確存儲LZ所說的問題,V1.22版中已經(jīng)修復(fù)此問題。
LZ對FastDFS研究得比較深入啊,再次贊一個!

論壇徽章:
4
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT運維版塊每日發(fā)帖之星
日期:2016-08-11 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-08-15 06:20:00
5 [報告]
發(fā)表于 2009-10-12 21:36 |只看該作者

回復(fù) #3 happy_fastdfs 的帖子

修正后的代碼片段如下:

        int server_index;

        server_index = pTrackerGroup->server_index;
        if (server_index >= pTrackerGroup->server_count)
        {
                server_index = 0;
        }
        pCurrentServer = pTrackerGroup->servers + server_index;

以前tracker server守護(hù)進(jìn)程的計數(shù)器也不是線程安全的,采用了類似的做法解決了多線程訪問導(dǎo)致讀取的計數(shù)器越界的問題。

論壇徽章:
0
6 [報告]
發(fā)表于 2009-10-13 09:14 |只看該作者
用個局部變量 int server_index;避免了加鎖,你的技巧也令人佩服啊!
再用個參數(shù)pTrackerServer memcpy出來,而不是直接使用pTrackerGroup內(nèi)的指針,避免了不安全的隱患,學(xué)習(xí)了!

發(fā)現(xiàn)這個問題,歸功于同事chenwq看api后的質(zhì)疑,因為他是多線程環(huán)境使用api。
我今天對比測試一下,如還有問題或還有其他地方線程安全問題,今天再回復(fù)這個貼。

論壇徽章:
0
7 [報告]
發(fā)表于 2009-10-13 15:13 |只看該作者
從svn取代碼測試OK,非常感謝,期待新版本的正式發(fā)布。

論壇徽章:
0
8 [報告]
發(fā)表于 2009-10-16 17:51 |只看該作者
實在佩服happyfish的編程水平和有耐心地回答用戶提出的問題。這兩天才剛開始看fastdfs,要好好地學(xué)習(xí)一下。
需要向happy_fastdfs 學(xué)習(xí)

論壇徽章:
0
9 [報告]
發(fā)表于 2009-10-29 17:39 |只看該作者
期待fastdfs逐漸完善和強大起來,成為一款高質(zhì)量的應(yīng)用系統(tǒng)。很感謝作者和發(fā)現(xiàn)問題的各位。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP