void foo() {
static int id = 0;
const int local_id = id++;
//do something with local_id;
}
多个线程å¯ä»¥å¤šæ¬¡å¹¶è¡Œè°ƒç”¨foo。我希望fooçš„æ¯æ¬¡è°ƒç”¨éƒ½ä½¿ç”¨local_id的“唯一â€å€¼ã€‚上é¢çš„代ç å¯ä»¥å—?我想知é“第二个线程是å¦åœ¨ç¬¬ä¸€ä¸ªçº¿ç¨‹å¢žåŠ 值之å‰å°†id的值赋给local_id。如果ä¸å®‰å…¨ï¼Œæ˜¯å¦æœ‰ä»»ä½•æ ‡å‡†è§£å†³æ–¹æ¡ˆï¼Ÿ
ç”案 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。