<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 gcc 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 m0 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


  waldorf  Създадено на 08.01.2023, видяно: 587 пъти. #83986
johnfound
palavrov

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

Вкарването на елементи в опашката е еднозначно понятие – вкарваш ги и толкова. Затова и много нишки могат да вкарват едновременно и без проблеми елементи. И за елементите и за опашката е все едно кой вкарва елементите, важното е в какъв ред.

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

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

Но всъщност реално в проекта, в който ще използвам това, ще има само една нишка, която ще тегли елементи от опашката. Тегленето го направих thread-safe, просто защото частично се пресича с вкарването на елементи при обновяването на указателите.

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

Мисля, че също може да не ползваш pFirst за sentinel от което хем кода ще стане по ясен, хем ще може да се развържеш от изискването .next да е винаги на на отместване нула.



  waldorf  Създадено на 08.01.2023, видяно: 583 пъти. #83987
realinformatik
palavrov

Бравос, взимам си думите назад. Кода ти е ОК. Конкурентно добавяне ще накъса опашката на парчета но след известно време ще ги залепи всички в правилния ред. Омотването ми дойде, че първо не знаех как работи cmpxchg и второ не обърнах внимание, че pFirst се попълва при създаване на списъка и се ползва като sentinel + не на последно място неоправдана арогантност за което се извинявам. Доста елегантно се е получило но все пак това, че не може конкурентно да се вадят елементи си е проблем.

Ехе за пръв път някой в тоя форум да деескалира и да адмитне грешка.

Еми никога не е късно да станеш за резил, кой ми е крив, че не внимавам и се заяждам без да съм разбрал кое как работи ... rofl



  BIGBUGEX  Създадено на 09.01.2023, видяно: 569 пъти. #83988

Накарах аи-то да направи лок фрee имплементация.

chatgpt

Sure, here is an example of a lock-free FIFO queue implemented using a linked list in x86 assembly language:

; Linked list element
struc element {
	.next	dd ?
	.data	dd ?
}

; FIFO queue
struc queue {
	.head		dd ?
	.tail		dd ?
}

; Initialize a queue
queue_init:
	xor	eax,eax
	mov	[ecx.queue.head],eax
	mov	[ecx.queue.tail],eax
	ret

; Push an element onto the queue
queue_push:
	mov	eax,[ecx.queue.tail]
	mov	[eax.element.next],edx
	
	@@:
	mov	ecx,[ecx.queue.tail]
	mov	eax,[ecx.element.next]
	lock cmpxchg [ecx.queue.tail],edx
	jne	@b
	
	ret

; Pop an element from the queue
queue_pop:
	mov	ecx,[ecx.queue.head]
	mov	eax,[ecx.element.next]
	
	test	eax,eax
	jz	.exit
	
	mov	[ecx.element.next],0
	lock cmpxchg [ecx.queue.head],eax
	jne	.exit
	
	.exit:
	mov	eax,ecx
	ret

This implementation uses the lock cmpxchg instruction to atomically update the head and tail pointers of the queue. The queue_push function uses a spinloop to retry the update until it succeeds, while the queue_pop function checks whether the queue is empty before attempting to remove an element.

One potential issue with this implementation is that the queue_pop function does not wait for an element to be added to the queue if it is empty. If you need to block until an element becomes available, you could consider using a different synchronization primitive, such as a semaphore or a condition variable, to wait for the queue to become non-empty.

Харесало ми е синтаксиса. Тва след една две версии ще го направят частно. Няма да има достъп за простосмъртни.



  ЩеВиЕбаМайката  Създадено на 09.01.2023, видяно: 563 пъти. #83991

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



  Дон Реба  Създадено на 09.01.2023, видяно: 561 пъти. #83994
ЩеВиЕбаМайката

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

стиви, бягай в бегемама, там като се изпокарат кокошките трият не само тролските коментари, ами цели теми, много ще ти хареса



  bvbfan  Последно редактирано на 09.01.2023 от bvbfan, видяно: 555 пъти. #83996
johnfound

Записът в [pFirst] ще се случи само един единствен път, когато [pLast] == pFirst.

При всички комбинации опашката остава в коректно състояние.

Не е вярно, това трябва да става всеки път, когато опашката е празна, т.е. при премахване. Да не говорим, че pFirst и pLast репрезентират само 1 опашка.



  johnfound  Създадено на 09.01.2023, видяно: 553 пъти. #83997
bvbfan
johnfound

Записът в [pFirst] ще се случи само един единствен път, когато [pLast] == pFirst.

При всички комбинации опашката остава в коректно състояние.

Не е вярно, това трябва да става всеки път, когато опашката е празна, т.е. при премахване. Да не говорим, че pFirst и pLast репрезентират само 1 опашка.

Ами тя тогава е празна опашката, когато [pLast] == pFirst. (Обърни внимание на квадратните скоби). И да, всеки път, когато е празна опашката, първият вкаран елемент се записва в pFirst.



  johnfound  Създадено на 09.01.2023, видяно: 549 пъти. #83998
ЩеВиЕбаМайката

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

Ся пък от какво изперка? Малко по-конкретно не може ли, ами всеки път трябва да гадая какво е искал да каже автора... :-(



  bvbfan  Създадено на 09.01.2023, видяно: 544 пъти. #83999
johnfound
bvbfan
johnfound

Записът в [pFirst] ще се случи само един единствен път, когато [pLast] == pFirst.

При всички комбинации опашката остава в коректно състояние.

Не е вярно, това трябва да става всеки път, когато опашката е празна, т.е. при премахване. Да не говорим, че pFirst и pLast репрезентират само 1 опашка.

Ами тя тогава е празна опашката, когато [pLast] == pFirst. (Обърни внимание на квадратните скоби). И да, всеки път, когато е празна опашката, първият вкаран елемент се записва в pFirst.

Именно, може да се изпразни между двете атомични операции.



  johnfound  Създадено на 09.01.2023, видяно: 540 пъти. #84000
bvbfan
johnfound
bvbfan
johnfound

Записът в [pFirst] ще се случи само един единствен път, когато [pLast] == pFirst.

При всички комбинации опашката остава в коректно състояние.

Не е вярно, това трябва да става всеки път, когато опашката е празна, т.е. при премахване. Да не говорим, че pFirst и pLast репрезентират само 1 опашка.

Ами тя тогава е празна опашката, когато [pLast] == pFirst. (Обърни внимание на квадратните скоби). И да, всеки път, когато е празна опашката, първият вкаран елемент се записва в pFirst.

Именно, може да се изпразни между двете атомични операции.

В смисъл? Кое да се изпразни? Как? Човек, четеца на мисли ми е ремонт, няма части и скоро няма да стане.



  ТояДетВиНабиКанчето  Създадено на 09.01.2023, видяно: 503 пъти. #84013
Дон Реба
ЩеВиЕбаМайката

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

стиви, бягай в бегемама, там като се изпокарат кокошките трият не само тролските коментари, ами цели теми, много ще ти хареса

Реба, това е психично болния Един от многото, бахти и тъпаците сте да не му различавате 100-те му акаунта. Чорбар и други никове. Съберете пари и го пратете да се лекува.



  Един от многото  Създадено на 09.01.2023, видяно: 492 пъти. #84015
ТояДетВиНабиКанчето
Дон Реба
ЩеВиЕбаМайката

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

стиви, бягай в бегемама, там като се изпокарат кокошките трият не само тролските коментари, ами цели теми, много ще ти хареса

Реба, това е психично болния Един от многото, бахти и тъпаците сте да не му различавате 100-те му акаунта. Чорбар и други никове. Съберете пари и го пратете да се лекува.

Чей бе - ЩеВиЕбаМайката и Чорбар не са мои акаунти. Аз съм честен лаладжия.

Пак ли требе да показвам снимки на всичките си акаунти? 🙄


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