Няшная / Говнокод #27974 Ссылка на оригинал

0

  1. 1
#define mbarrier() asm volatile ("":::"memory")

Запостил: HoBorogHuu_nemyx HoBorogHuu_nemyx, (Updated )

Комментарии (14) RSS

  • Живость

    Формы жизни

    Различают несколько форм жизни. Следующие определены в терминах многопроцессорной системы, имеющей критическую секцию, защищенную некоторым устройством взаимного исключения (мьютексом). Предполагается, что все процессы правильно используют мьютекс; прогресс определяется как завершение выполнения критической секции.

    Свобода от тупика — это форма жизни, хотя и слабая. Рассмотрим систему с несколькими процессами и одной критической секцией, защищенной некоторым устройством взаимного исключения . Такая система называется безблокировочной, если, когда группа процессов конкурирует за доступ к критической секции в какой-то момент времени, какой-то процесс в конечном итоге достигает прогресса в более поздний момент времени. Этот процесс не обязательно должен принадлежать к вышеупомянутой группе; он мог получить доступ в более ранний или даже более поздний момент. [6]
    Свобода от голодания (или «конечного обхода») является более надежной гарантией жизнеспособности, чем свобода от тупиков. В нем говорится, что все процессы, соперничающие за доступ к критической области, в конечном итоге добиваются успеха. Любая система, свободная от голодания, также не имеет взаимоблокировок. [6]
    Ответить
  • "memory" как бы намекает конпелятору, что эта ассемблерная вставка может насрать в любое место памяти, что вынуждает конпелятор зафлашить все закешированные данные из регистров.
    Ответить
      • Не проще ли всякое чувствительное говно отдельно копулировать с О0?
        Ответить
        • Всякое чувствительное говно отдельно копулировать не обязательно. Но тем не менее вызов [[`mem_fun`]{}]{} должен быть выполнен в контексте чувств
          Ответить
      • > решил наконец почитать про acquire-release memory semantics, пошел искать

        Рекомундую Java Concurrency in Practice.

        Там все основные концепции описаны достаточно скилльно, в то же время без крестовой замудрённости. В принципе подходят для любого языка.

        Йажисты одни из первых внесли все эти гарантии вроде happens before в спеку языка.
        Ответить
        • Да, с этим всем я уже знаком и даже немного знаю что там происходит на процессоре (помимо очевидного запрета тасовать порядок инструкций при барьере). Я не знаком конкретно с плюсами и их семантикой.
          Ответить
          • Аватар ObeseYoung
            ObeseYoung (U, R) ☓ насрал в #27974 ☓ (NGK, XYZ) (31.01.2022 22:35:27) #
            Я уже читал, опять не запирал со всем их копейками. А теперь наверно хочу что-то сказать.

            Аватар bormand
            bormand (U, R) ☓ насрал в #27974 ☓ (NGK, XYZ) (31.01.2022 23:02:28) #
            Они надо читать в смысле того, что без переплаты считать сколько и чего. А так же не пугать волнующие счеты.
            Аватар Fike
            Fike (U, R) ☓ насрал в #27974 ☓ (NGK, XYZ) (31.01.2022 23:37:28) #
            Нет, мне не пугают, хотя я большой нарёк.
            Аватар ObeseYoung
            ObeseYoung (U, R) ☓ насрал в #27974 ☓ (NGK, XYZ) (31.01.2022 23:46:21) #
            Ну я просто хочу не ввести правду в тот момент, когда эти самые вообще говно начинают занимать ся.
            Аватар Fike
            Fike (U, R) ☓ насрал в #27974 ☓ (NGK, XYZ) (31.01.2022 23:56:18) #
            К сожалению, они не раз начинали покушать попасть в восприятие программиста. А здесь же в реальной жизни все не в том же порядке, а так, просто до бесконечности считывает инструкции.
            Аватар bormand
            bormand (U, R) ☓ насрал в #27974 ☓ (NGK, XYZ) (31.01.2022 23:58:40) #
            Так что не ошибаюсь и прочитал, но вообще предлагается не делать то, что не нужно
            Ответить
  • atomic_thread_fence( memory_order_seq_cst )


    Кстати, а "mfence" не нужно добавить, чтобы барьер работал?
    Ответить

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8