Speaking of which, this means you can't have one of your locks scoped inside another one.
#define LOCKED(lk) for(int UNIQUE_ID=0; UNIQUE_ID<1 && !lk_lock(lk); lk_unlock(lk), UNIQUE_ID++)
lock(lk_var) lock(lk_var2) { lk_var = lk_var2; }
lock(lk_var) { lock(lk_var2 { lk_var = lk_var2; } }
No, you can't, and no they don't.
lock(lk_var) { lock(lk_var2) { var = var2; } }
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; } }
for (int i = 0; i < 5; ++i) { for (int i = 0; i < 5; ++i) { printf("hello\n"); } }