Информация об изменениях

Сообщение Re[32]: Безопасность Rust от 31.05.2019 9:21

Изменено 31.05.2019 9:26 ·

Re[32]: Безопасность Rust
Здравствуйте, alex_public, Вы писали:

_>Ха. Вообще то для чтения/записи atomic переменной используется в точности такая же инструкция, как и для обычного int'a. Можешь посмотреть на реальном коде https://godbolt.org/z/I3lOwe, если так до сих пор сам не понял и мне не веришь. Банально потому, что это эти инструкции атомарные от природы!


Ну давай посмотрим вместе:
atomic:
        mov     DWORD PTR v[rip], 1
        mfence

non atomic:
        mov     DWORD PTR v1[rip], 1

Действительно... одной инструкцией меньше, одной больше... Кака разница? В главном-то ты прав!

А ещё давай попробуем другие опции. "x86-64 clang 8.0.0":
atomic:
        mov     eax, 1
        xchg    dword ptr [rip + v], eax

non atomic:
        mov     dword ptr [rip + v1], 1


Или вот "ARM64 gcc 8.2":
atomic:
        stlr    w2, [x1]

non atomic:
        str     w2, [x1]


А особенно прикольно "ARM gcc 8.2"
atomic:
        bl      __sync_synchronize
        mov     r3, #1
        ldr     r4, .L4
        str     r3, [r4]
        bl      __sync_synchronize

non atomic:
        mov     r3, #1


Никакой синхронизации, говоришь?
Re[32]: Безопасность Rust
Здравствуйте, alex_public, Вы писали:

_>Ха. Вообще то для чтения/записи atomic переменной используется в точности такая же инструкция, как и для обычного int'a. Можешь посмотреть на реальном коде https://godbolt.org/z/I3lOwe, если так до сих пор сам не понял и мне не веришь. Банально потому, что это эти инструкции атомарные от природы!


Ну давай посмотрим вместе:
atomic:
        mov     DWORD PTR v[rip], 1
        mfence

non atomic:
        mov     DWORD PTR v1[rip], 1

Действительно... одной инструкцией меньше, одной больше... Кака разница? В главном-то ты прав!

А ещё давай попробуем другие опции. "x86-64 clang 8.0.0":
atomic:
        mov     eax, 1
        xchg    dword ptr [rip + v], eax

non atomic:
        mov     dword ptr [rip + v1], 1


Или вот "ARM64 gcc 8.2":
atomic:
        stlr    w2, [x1]

non atomic:
        str     w2, [x1]


А особенно прикольно "ARM gcc 8.2"
atomic:
        bl      __sync_synchronize
        mov     r3, #1
        ldr     r4, .L4
        str     r3, [r4]
        bl      __sync_synchronize

non atomic:
        mov     r3, #1
        str     r3, [r4, #4]


Никакой синхронизации, говоришь?