Re: [HACKERS] Fix performance of generic atomics
От | Sokolov Yura |
---|---|
Тема | Re: [HACKERS] Fix performance of generic atomics |
Дата | |
Msg-id | 626c2f135acc668e56905e47f004f216@postgrespro.ru обсуждение исходный текст |
Ответ на | Re: [HACKERS] Fix performance of generic atomics (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: [HACKERS] Fix performance of generic atomics
Re: [HACKERS] Fix performance of generic atomics Re: [HACKERS] Fix performance of generic atomics |
Список | pgsql-hackers |
Hello, Tom. I agree that lonely semicolon looks bad. Applied your suggestion for empty loop body (/* skip */). Patch in first letter had while(true), but I removed it cause I think it is uglier: - `while(true)` was necessary for grouping read with `if`, - but now there is single statement in a loop body and it is condition for loop exit, so it is clearly just a loop. Optimization is valid cause compare_exchange always store old value in `old` variable in a same atomic manner as atomic read. Tom Lane wrote 2017-05-25 17:39: > Sokolov Yura <funny.falcon@postgrespro.ru> writes: > @@ -382,12 +358,8 @@ static inline uint64 > pg_atomic_fetch_and_u64_impl(volatile pg_atomic_uint64 *ptr, uint64 > and_) > { > uint64 old; > - while (true) > - { > - old = pg_atomic_read_u64_impl(ptr); > - if (pg_atomic_compare_exchange_u64_impl(ptr, &old, old & and_)) > - break; > - } > + old = pg_atomic_read_u64_impl(ptr); > + while (!pg_atomic_compare_exchange_u64_impl(ptr, &old, old & and_)); > return old; > } > #endif > > FWIW, I do not think that writing the loops like that is good style. > It looks like a typo and will confuse readers. You could perhaps > write the same code with better formatting, eg > > while (!pg_atomic_compare_exchange_u64_impl(ptr, &old, old & and_)) > /* skip */ ; > > but why not leave the formulation with while(true) and a break alone? > > (I take no position on whether moving the read of "old" outside the > loop is a valid optimization.) > > regards, tom lane With regards, -- Sokolov Yura aka funny_falcon Postgres Professional: https://postgrespro.ru The Russian Postgres Company -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers
Вложения
В списке pgsql-hackers по дате отправления: