é™æ€å±€éƒ¨å˜é‡çš„线程安全增é‡

时间:2014-10-28 14:26:23

标签: c++ multithreading static

void foo() {
    static int id = 0;
    const int local_id = id++;
    //do something with local_id;
}

多个线程å¯ä»¥å¤šæ¬¡å¹¶è¡Œè°ƒç”¨foo。我希望fooçš„æ¯æ¬¡è°ƒç”¨éƒ½ä½¿ç”¨local_id的“唯一â€å€¼ã€‚上é¢çš„代ç å¯ä»¥å—?我想知é“第二个线程是å¦åœ¨ç¬¬ä¸€ä¸ªçº¿ç¨‹å¢žåŠ å€¼ä¹‹å‰å°†id的值赋给local_id。如果ä¸å®‰å…¨ï¼Œæ˜¯å¦æœ‰ä»»ä½•æ ‡å‡†è§£å†³æ–¹æ¡ˆï¼Ÿ

2 个答案:

答案 0 :(得分:5)

您的代ç ä¸æ˜¯çº¿ç¨‹å®‰å…¨çš„,因为多个线程å¯ä»¥åŒæ—¶è¯»å–id并生æˆç›¸åŒçš„local_id值。

如果您需è¦çº¿ç¨‹å®‰å…¨ç‰ˆæœ¬ï¼Œè¯·ä½¿ç”¨C ++ 11中æ供的std::atomic_int:

void foo() {
    static std::atomic_int id;
    const int local_id = id++;
    //do something with local_id;
}

答案 1 :(得分:0)

您的代ç ä¸æ˜¯çº¿ç¨‹å®‰å…¨çš„,因为两个线程å¯èƒ½åŒæ—¶å¢žåŠ id。

对共享idå˜é‡ä½¿ç”¨mutual exclusion或std :: atomic。