c multithreading - Serbipunk/notes GitHub Wiki

variable specifier

alignas

struct alignas(64) ThreadData {
    int value;
    // ๅ‰ฉไฝ™60ๅญ—่Š‚่‡ชๅŠจๅกซๅ……๏ผŒไธไผšไธŽๅ…ถไป–ๆ•ฐๆฎๅ…ฑไบซ็ผ“ๅญ˜่กŒ
};

alignas(float)

alignas is an alignment specifier that lets you manually override the compiler's default alignment for a variable or struct.


struct ThreadData {
    int value;  // alignment: 4
};
// default alignment: 4 bytes

Memory layout (two threads' data could end up in the same cache line): [ ThreadData_A ][ ThreadData_B ] [โ†โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€” 64-byte cache line โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ†’]

alignof()

struct alignas(std::hardware_destructive_interference_size) ThreadData {
    int value;
};