2013-10-22 32 views
0

Thread.CurrentThread.ManagedThreadId在多處理器機器上返回唯一ID。是Thread.CurrentThread.ManagedThreadId多處理器安全

說明:我想生成唯一的編號。我生成的基於當前時間的唯一編號,即 currentTmeinmillisecons但兩個線程訪問相同的時間戳相同的功能,所以我想添加一些獨特的時間戳。因此計劃在CurrentTimeInMilliseconds中添加Thread.CurrentThread.ManagedThreadId

所以我可以在CurrentTimeInMilliseconds中添加Thread.CurrentThread.ManagedThreadId。

+0

請學習格式化您的問題.. –

+0

對不起,我糾正了相同的錯誤格式。 –

+2

如果它不需要是一個數字使用'Guid' –

回答

3

「在CurrentTimeInMilliseconds中添加Thread.CurrentThread.ManagedThreadId」並不清楚你的意思。說,對於ManagedThreadId + CurrentTimeInMilliseconds:

1+2 = 3 
2+1 = 3 

所以你實際上是創建到底是「獨一無二」的價值呢?如果你每毫秒多次調用一次,會發生什麼?如果你需要的東西,這將是每個進程每次呼叫的唯一,我會做這樣的事情:如果你想在生成多個進程的唯一編號

using System.Threading; 

static class Foo 
{ 
    static long i; 
    public static long GetUnique() { return Interlocked.Increment(ref i); } 
} 

Guid是要走的路。

+0

非常感謝你的答覆。但實際上我的方法,將返回以毫秒爲單位的時間正在工作好,但我在多處理器機器上遇到了問題,因爲方法是從兩個線程中調用的,並且兩個線程都有相同的時間戳。我想爲所有線程提供不同的時間戳。 –

+0

*我想爲所有線程提供不同的時間戳*然後在不同的時間調用該方法。否則,你給所有線程的是不是一個時間戳。 –

+0

非常感謝您的回覆。 其實我的方法工作正常。但我只想更新我的方法。 所以我怎麼能在多處理器機器上生成唯一的編號。 所以我做 \t \t \t \t \t \t回\t currenttimeinMilliseconds + Thread.CurrentThread.ManagedThreadId //唯一編號 \t \t \t \t所以問題是:那麼它會正常工作或沒有多處理器計算機上。 \t \t它已經在單處理器中正常工作。 \t \t其實我要求多處理器becasuse如果\t Thread.CurrentThread.ManagedThreadId對不同的不同線程是不同的,那麼我的函數將返回唯一的數字。 –