<bgdev />free

| |  


All tags 2023 9may ai algorithm alpha amd american api argon2 arm asm asmbb assembler attachment awareness balgaria bay888 bcrypt bender beta bgdev-next bgdev-next.👍 big.data bitchnigga bitcoin bmw boi borg brexit bug bulgaria business c cad chat cloud computer-names console crossorigin deprivation desktop dna dotnet email eupl falling feature forum foundation fp fresh fun game github goats google gpl gpt gpt.3.5 gypsies happiness harvard hash improvement include investment it java javascript js kleta kleta.maqka.balg lambi language learning leftovers legend level levenshtein.dist libx license linkedlist linux ma mcafee mele microsoft minimag minimalism negro net nginx nigga not.a.bug oop paradigm parler patterns perception persuasion pipe play.station politics populi pornhub pow pro programming protonmail python reba rust sci-fi scripting seks seo server shell sleep smartbeauty soft-skills sqlite srabska sse starship sugerface syntax tablet tailwindcss telegram theme thug troll80lvl tutanota typescript uacme ui uk unix untermensch upload uptime usa utilities ux vb via viber virtual.reality vox vps vulnerable war wasm weapons-grade web windows word x86 xbox xss youtube zig ziglang Übermensch БОКЕБЪЛГАРИН БЪ БЪлгария Белезниците Били Били.Белезниците БялДонор Веган Виста Възраждане ГЛУПАК Гана Глиста ЕС Казарма Копейкин Мода.и.овча.мисъ НЕКАДЪРНИК НРБ ПО-ЗЛЕ.И.ОТ.РАБИ Подкасти Разни Румен СИК СКУМ СетенЧук Скум ТИР Туче Украйна Урсула Яначков авангард аз айфонджия алгоритми амбиции анархизъм антиваксъри армения аудио аутисти бази.данни бакъп без без.пръчове безпросвета бенчмарк биготи биомаса бира боклук борисов ботев брадва булшит бъг бъгове бял ваксина вандал век венерика викинги вицове вишу война вървежен гана ганорник гей гейщина германия герои гешев глупак говеда групировка гюбек данъкоплатец двойни.стандарти дедотия демокрация дизайн дисциплина добитък докери долар донори држава дришльо дрон ебане еврогейски.съюз езици експеримент електроника електроника.s2 емиграция ендпойнт енум ерген ергономия жалкар задача затоплизъм защита здраве златен злато игри идеали идиократ идиократи идиокрация идиот избори избори.рабин изкуство икономика имбецили имейл инвестиране инокулация инструмента интервю ипад искам.да.си.реда казах камшикодържач капитализъм карабах караница картечница кино клавиатура ковид19 колайдер колям.кур комари комплексар комунизъм консолидация конспирации космонавтика кофа кофит-19 краставица криптовалути курви кучелюбци лайно лаладжия лаптоп либерастия литература лоши.практики луд лъжеучени лъжец любов майни майтапи малоумници мафия мениджмънт месо местене метавселена метафизика механика мистика мисъл мода мода.овча.мисъл модерация морал мутра мутри наука национализъм не.it негър некадърник некадърници неон нидерландия овча овчи олигофрени организация офтопик парички партия педал пенджури пенсия пишока плюскане победа погромист поезия политика порно посредствен почивка празници прасе превод предалщина програмиране проект проста простотии против.правилата проф пръч пръч.дришльо пръчка психика психични.болести психология пустиняк путин путката путьо рабин рабин.е.шибан.пе работа радост разврат разни разработка расизъм резерват рейтинг реклама рекламен религия рест ризи ропче ропчета русия руски.език рутина самоковска сасипаха секира село селяндур сериали сериозно.програм сетен сеянин симулация скопяване скръм слушалки сортиране софия софтуер софтуни социализъм спектрометър спринтове сране стандарти стил стуйо стюи сушилня сцена съвет съм сън сървър сърничка таб ташаци телевизия тема територията терминология термояд технологии титли традиция тролинг тръмп туба туче тъпак тъпанари тъпня уиндоус украйна умнокрасивци фалит фантастика фашизъм фейк.акаунти физика филми форум форумни.проекти футбол хазарт хамали харабия хардуер хахаха хомофобия хостинг храна хумор цайко цайси целофан цензура цензурра циганин чалга чалгар чекии чернокраки честота чипове чнг чужбина чук шпация щайга юан яката яко ям 🔨 😂 🪓


Атомарно вкарване на елемент в опашка – възможно ли е?

  

0 1 2 3


  johnfound  Създадено на 05.01.2023, видяно: 736 пъти. #83790

Чудя се тука. Възможно ли е да се направи добавяне на елементи в списък/опашка от няколко нишки, без да се използва mutex или друго подобно заключване, а само с използване на атомарни инструкции?

Някакви идеи/предложения?



  Delegate  Последно редактирано на 05.01.2023 от Delegate, видяно: 732 пъти. #83791

Само ще добавяш ли ?

https://stackoverflow.com/questions/24563000/concurrently-appending-to-list-tail-without-a-mutex-lock



  johnfound  Създадено на 05.01.2023, видяно: 728 пъти. #83792
Delegate

Само ще добавяш ли ?

https://stackoverflow.com/questions/24563000/concurrently-appending-to-list-tail-without-a-mutex-lock

Да, това и аз току що го четох. Но не, за съжаление искам и да вадя – дефакто FIFO. Но ще вади само една нишка гарантирано, а една или повече ще добавят.

Но тъй като в 99% от случаите и на ваденето и на вкарването ще работи дефакто само една и съща нишка, то не ми се иска да използвам мютекси за 1% от случаите. Но и не ми се иска да се отказвам от този 1%. rofl



  Rabin  Създадено на 05.01.2023, видяно: 726 пъти. #83794

Ако ползваше нормален език за кодене тия неща са ти направени на готово.



  ТояДетВиНабиКанчето  Последно редактирано на 05.01.2023 от ТояДетВиНабиКанчето, видяно: 725 пъти. #83795

Радетелю на свободата и справедливостта, заповядай имплементация подобна на линка от делегата от лошите микрософтци :

https://referencesource.microsoft.com/#mscorlib/system/Collections/Concurrent/ConcurrentDictionary.cs,5d24b6df7d0ea599.

Речник е, ама и за списък може да си го реализираш. С моето дебъгване на CQRS в продъкшън срещу една торба пари само с това мога да ти помогна :(



  Реконструктор  Създадено на 05.01.2023, видяно: 714 пъти. #83798
johnfound

Чудя се тука. Възможно ли е да се направи добавяне на елементи в списък/опашка от няколко нишки, без да се използва mutex или друго подобно заключване, а само с използване на атомарни инструкции?

Някакви идеи/предложения?

Не е възможно. Дори всичко да ти е статично, ти трябват мин. 2 операции - преместване на опашката и поставяне на елемента.



  Дон Реба  Създадено на 06.01.2023, видяно: 684 пъти. #83842

ами правиш си мутекс със "атомарни инструкции" и това е. навремето ни казваха че не е възможно ако няма инструкция от типа атомарна размяна на стойности (xchg), после четох някъде че било възможно, но всъщост не ме интересува сериозно и не съм се задълбавал.



  johnfound  Последно редактирано на 06.01.2023 от johnfound, видяно: 673 пъти. #83845
Дон Реба

ами правиш си мутекс със "атомарни инструкции" и това е. навремето ни казваха че не е възможно ако няма инструкция от типа атомарна размяна на стойности (xchg), после четох някъде че било възможно, но всъщост не ме интересува сериозно и не съм се задълбавал.

Ами не искам с мютекс, защото мютекса първо означава една същност повече в кода. И второ, трябва да го чакаш, ако някой го е прихванал.

Е, аз всъщност го направих за вкарването на елементи в опашката.


; това се вкарва в опашката.
struct Element
  .p_next   dd ?
  .data     db 'тука са полезните данни на елемента'
ends

; алокейтваме елемента

        stdcall GetMem, sizeof.Element
        mov     edi, eax

; запълваме полетата му.
        xor     eax, eax
        mov     [edi+Element.p_next], eax

; заместваме указателя към последния елемент в главната структура.
        xor     eax, eax  
        lock cmpxchg [esi+MainStructure.pLastElement], edi
        je      .element_ok         ; ако там е било 0 значи това е последния елемент и завършваме.

; Ако вече е имало последен елемент/и ги проследяваме и се записваме след последния.
; На този етап, възможно след нашият елемент вече има записани други елементи.
.loop_last:
        mov     ecx, eax
        xor     eax, eax
        lock cmpxchg [ecx+Element.p_next], ebx
        jne     .loop_last

.element_ok:

Тука интересното е, че във всеки един момент, указателя към последния елемент в главната структура [esi+MainStructure.pLastElement] може и да не сочи точно към последния елемент, но сочи някъде близо до него. Но самият списък винаги е коректен.

Сега трябва да измисля и как да махам елементи от списъка и всичко ще е супер.



  Дон Реба  Създадено на 06.01.2023, видяно: 664 пъти. #83846

lock cmpxchg esi+MainStructure.pLastElement, edi

ето ти го "мутекса", какво е това "не искам да вкарвам нови същности" . разликата с "истински" мутекс е че ползваш самия указател а не отделен флаг.



  johnfound  Създадено на 06.01.2023, видяно: 660 пъти. #83848
Дон Реба

lock cmpxchg esi+MainStructure.pLastElement, edi

ето ти го "мутекса", какво е това "не искам да вкарвам нови същности" . разликата с "истински" мутекс е че ползваш самия указател а не отделен флаг.

М-м-м, не е точно така. Това не е мютекс, а атомарна инструкция. Малко по-различен синхронизиращ елемент и работи различно.



  bvbfan  Създадено на 06.01.2023, видяно: 653 пъти. #83850
ТояДетВиНабиКанчето

Радетелю на свободата и справедливостта, заповядай имплементация подобна на линка от делегата от лошите микрософтци :

https://referencesource.microsoft.com/#mscorlib/system/Collections/Concurrent/ConcurrentDictionary.cs,5d24b6df7d0ea599.

Речник е, ама и за списък може да си го реализираш. С моето дебъгване на CQRS в продъкшън срещу една торба пари само с това мога да ти помогна :(

Трябва да си изясниш какво е конкурентно, какво е паралелно и разликите между тях.



  bvbfan  Създадено на 06.01.2023, видяно: 653 пъти. #83851
Rabin

Ако ползваше нормален език за кодене тия неща са ти направени на готово.

Всъщност няма "нормален" език с подобна имплементация.



  bvbfan  Създадено на 06.01.2023, видяно: 653 пъти. #83852
johnfound

Чудя се тука. Възможно ли е да се направи добавяне на елементи в списък/опашка от няколко нишки, без да се използва mutex или друго подобно заключване, а само с използване на атомарни инструкции?

Някакви идеи/предложения?

Може, но проблемът е race condition. Има 2 положения, които трябва да решиш:

Data race - това е ситуация, при която достъпваш споделен ресурс конкурентно за четене и запис - това се решава с атомична операция

Race condition - това е ситуация, при която имаш достъпване на повече от една операция конкурентно, т.е. искаш да промениш стойността на повече от една атомична променлива с атомична такава.



  Дон Реба  Създадено на 06.01.2023, видяно: 650 пъти. #83853
johnfound
Дон Реба

lock cmpxchg esi+MainStructure.pLastElement, edi

ето ти го "мутекса", какво е това "не искам да вкарвам нови същности" . разликата с "истински" мутекс е че ползваш самия указател а не отделен флаг.

М-м-м, не е точно така. Това не е мютекс, а атомарна инструкция. Малко по-различен синхронизиращ елемент и работи различно.

да, затова сложих кавички. истинския мутекс обаче е по-добро решение, защото няма да го сбъркаш без да искаш. няма гаранция че хитрото ти решение няма дупка и тоя подход е оправдан само в специални случаи. аргумента "ама така не цикля върху флага" не е валиден, защото в добавянето имаш алокация, където бъди сигурен пада много по-яко циклене. ако толкова те е грижа за перформанса, слагаш нормален мутекс , алокираш чрез сингъл тред алокатор, и така с едно локване защитаваш както добавянето, така и алокацията, което предполагам ще е по-бърз вариант.



  Stilgar  Създадено на 06.01.2023, видяно: 644 пъти. #83855

Само като видя че работата е linked list...



  johnfound  Създадено на 06.01.2023, видяно: 627 пъти. #83856
Stilgar

Само като видя че работата е linked list...

На мене също не ми харесва да алокирам малки парчета. Мисля за вариант с организация на опашката в обикновен масив. Но тогава ще имам ограничение по броя на елементите. Което впрочем, може и да не ми пречи. Ще видим.



  Дон Реба  Създадено на 06.01.2023, видяно: 624 пъти. #83857

ако се откажеш от комунистическата обсесия за Справедливост, няма нужда от фифо и следователно от опашка изобщо. тогава става и с обикновен динамичен масив без лимит на размера. аз никога през живота си не съм ползвал фифо, може и да е затова



  Golden Gega  Създадено на 06.01.2023, видяно: 617 пъти. #83859
Дон Реба

ако се откажеш от комунистическата обсесия за Справедливост, няма нужда от фифо и следователно от опашка изобщо. тогава става и с обикновен динамичен масив без лимит на размера. аз никога през живота си не съм ползвал фифо, може и да е затова

Еми ако не си писал на асемблер или на стеков език е нормално, асемблера тренира определени модели на мислене изключително добре но после влизаш образно казано в конфликт с хора на които моделирането е тренирано от езици на по-високо ниво.

Това се преживява и в преходите от процедурно програмиране към ООП и т.н., особено интересно става при патерните които имат основната заслуга за сравнително бавното израстване на масовия програмист.



  Дон Реба  Създадено на 06.01.2023, видяно: 603 пъти. #83863

абе писал съм и на асемблер, ама не виждам нещо различно. според мен няма употреба на ФИФО в която пряко или косвено да не е замесена думата "справедливост" , тя самата дума "опашка" си навява асоциации достатъчно



  realinformatik  Създадено на 06.01.2023, видяно: 586 пъти. #83870

Начи с атомарна инструкция ще стане, ако проблема може да се реши от една такава инструкция. Но ако проблема е съставен, т.е. за решението му трябват повече от една инструкция (без значение атомарна или не), ще трябва да локнеш поредицата от тези инструкции.


0 1 2 3


Атомарно вкарване на елемент в опашка – възможно ли е?

  



AsmBB v3.0 (check-in: 7544654b24928b93); SQLite v3.47.0 (check-in: 03a9703e27c44437);
©2016..2024 John Found; Licensed under EUPL; Powered by Assembly language Created with Fresh IDE