5 ms·
You're also consuming the variable name i, which everyone else is probably using. Speaking of which, this means you can't have one of your locks scoped inside
by VikingCoder 13y ago
You're also consuming the variable name i, which everyone else is probably using.
Speaking of which, this means you can't have one of your locks scoped inside another one.
- JoeAltmaier 13y agoSUre you could. The{} make it work.
- VikingCoder 13y agoEDIT: I sit corrected. My post is wrong. No, you can't, and no they don't. lock(lk_var) { lock(lk_var2) { var = var2; } } That expands to: for(int i=0; (i < 1) && !lk_lock(lk_var); lk_unlock(lk_var), i++) { for(int i=0; (i < 1) && !lk_lock(lk_var2); lk_unlock(lk_var2), i++) { var = var2; } } You end up with an i scoped inside another i.
- plorkyeran 13y agoC++ has variable shadowing, so that works correctly. for (int i = 0; i < 5; ++i) { for (int i = 0; i < 5; ++i) { printf("hello\n"); } } prints hello 25 times.
- VikingCoder 13y agoOh right. My brain was stuck in another language. Wow, I forgot how much I'd forgotten about C++.
- JoeAltmaier 13y agoActually that's just C (name nesting)
- cjensen 13y agoSolvable by creating a Preprocessor macro which creates a unique and complex-named identifier. #define LOCKED(lk) for(int UNIQUE_ID=0; UNIQUE_ID<1 && !lk_lock(lk); lk_unlock(lk), UNIQUE_ID++) Use __LINE__ to help make the id unique.
- VikingCoder 13y agoThen you still can't forget and do this: lock(lk_var) lock(lk_var2) { lk_var = lk_var2; } Or this: lock(lk_var) { lock(lk_var2 { lk_var = lk_var2; } } Using the pre-processor to solve a regular, every day, hum-drum, solved-a-billion-times RAII problem is bad news.