Чтобы добавлять сообщения и комментарии, .

@alar:
alar

А есть вообще такая штука: timed mutex? Блокировка, которая при окончании таймаута автоматически отпускается.

@qnikst:
qnikst

deadlockempire.github.io

все ж уже это видели?

@fillest:
fillest

задолбался гуглить
1. Где пруф (если он есть — все пишут, но без пруфа), что на x86 чтение/запись в int по выровненному адресу атомарны?
2. Возвращает ли mmap адрес всегда выровненный как минимум по int?
Есть задумка использовать int, расположенный в начале замапленного участка (shm_open+ftruncate+mmap), для простой дешёвой синхронизации между процессами.

@nixorn:
nixorn

Мне нужно скормить ему файл, чтобы внутри по файлу построилась структура, и потом с этой структурой через браузер работать(смотреть,изменять). Снап парсит каждый реквест в своей монаде. Вопрос первый теоретический — чем конкуренция отличается от парралелизма? Вопрос второй практический — MVar — это то что нужно, или можно правильнее?

@qnikst:
qnikst

вот казалось бы простая задача, нужно изолировать поток,
в нём провести нужные операции и потом вернуться назад
все это кажется просто, но тут приходят они - асинхронные исключения,
и нужно, чтобы исключения приходящие во "wrapper" попадали в "worker".
В итоге получается треш и угар. Есть предложения по улушению?

callLocal ::
     Process a  -- ^ Process to run
  -> Process a  -- ^ Value returned
callLocal proc = mask $ \release -> do
  lock  <- liftIO $ newMVar ()
  tidMV <- liftIO $ newEmptyMVar
  mv    <- liftIO newEmptyMVar
  _ <- spawnLocal $ mask $ \release' -> do
         liftIO $ myThreadId >>= putMVar tidMV
         ep <- try $ release' $ proc <* liftIO (takeMVar lock)
         liftIO $ putMVar mv ep
  tid <- liftIO $ takeMVar tidMV
  let fetchResult =
        (takeMVar mv >>= either (throwIO :: SomeException -> IO a) return)
        `Exception.catch`
            (\e -> Exception.mask $ \release' -> do
                     ml <- tryTakeMVar lock
                     case ml of
                        Nothing -> -- lock already taked by worker so we need
                                   -- to rethrow exception now
                          throwIO e
                        Just{}  -> do
                          throwTo tid (e::SomeException)
                          putMVar lock ()
                     release' fetchResult)
  release $ liftIO $ fetchResult

@dr-Chaos:
dr-Chaos

Вот понятно как работает modifyMVar_ но всё таки что означает приписка в описании:
However, it is only atomic if there are no other producers for this MVar. Ведь всё что находится между takeMVar и putMVar выполняется эксклюзивно.

@dr-Chaos:
dr-Chaos

Есть такая задача: через вебсервер wrap приходи запрос. По его приходу должен запуститься асинхронный процесс (добавление/удаление сервера в кластер на RaFT-е) собственно мне нужно дождаться его завершения вполне себе "синхронно".
Я для этого взял 2 MVar-а. Собственно MVar можно воспринимать как однонаправленный канал (message box), в итоге получается я сделал что-то вроде двунаправленного канала.
Собственно вопрос: встречался ли кто с подобными готовыми примитивами?
ЗЫ готов выслушать предложения как эту задачу решить иначе.

@dr-Chaos:
dr-Chaos

А вообще кошерно прибивать потоки по killThread? Или грешновато?

@dr-Chaos:
dr-Chaos

В продолжение #2513200.
А для hackage.haskell.org генератора код из gist.github.com работает как ожидается.
Посмотрел я на реализацию Crypto.PubKey.DSA.sign — она использует, в итоге, withRandomBytes, а она, в свою очередь, cprgGenerate.
Собственно отсюда следует, что не стоит полагаться на реализацию SystenRNG, т.е. лучше вернуть IORef с генератором.

@dr-Chaos:
dr-Chaos

Господа гляньте плз код gist.github.com . Если расскомментить 14 строку и закоментить 13-ю вывод не измениться. Кажется ли это вам нормальным?
Собственно есть библитека Crypto.Random hackage.haskell.org замечательного параноика Vincent Hanquez . Он её запилил на замену своей же Crypto.Random.API . С предыдущей версией я просто хранил глобально IORef на какой-то системный инстанс CPRG и в ус не дул, просто подменял при использовании старый генератор на новый. Сейчас же появился EnthropyPool который держит байтстринг и MVar с текущей позицией в нём и каждый раз при вызове генератора обновляет этот MVar. При таком раскладе можно просто хранить глобальный EnthropyPool . Это здорово, но меня как-то напрягает смена подхода без смены интерфейса. Нафига тогда генератор возвращать?
ЗЫ Винсенту я уже написал, он пока молчит. Хочется знать ваше мнение.

@dr-Chaos:
dr-Chaos

Есть у меня в базе Postgre SQL некие записи, которые протухаю со временем и надо периодически чистить от них базу. Первое что пришло на ум использовать hackage.haskell.org .
Может есть какие best practicies?

@dr-Chaos:
dr-Chaos

гы-гы Впервые нарвался на приколы ленивости с atomocModifyIORef — она ленивая stackoverflow.com . Насколько я понимаю в base 4,6 специально добавили strict версию. Собственно вопрос а где может пригодиться ленивая?

@dr-Chaos:
dr-Chaos

А это нормальная практика просматривать TChan в цикле readTChan ... unGetTchan ? или грешновато?

@PineappleZombie:
PineappleZombie

I call it racing:

thttrhherraeedaa ddk ikkliilllelldee
dd

@dream-x:
dream-x

gee.cs.oswego.edu Doug Lea's Home Page

@dream-x:
dream-x

ruben.savanne.be

@neFormal:
neFormal

Что-то я пропустил это событие. Появился сайт от Дмитрия Вьюкова (aka remark), посвящённый параллельному программированию: 1024cores.net
Автор в этом силён и пользуется заслуженным авторитетом. Планирует собрать полезную инфу об алгоритмах, структурах данных и прочих вещах, относящихся к ПП. Всё будет, скорей всего, на английском. На русском только старые материалы.