
Roman
17.06.2018
06:52:48
Мьютексы тормозят только тогда, когда ты его надолго захватываешь и не освобождаешь. RWMutex лучше подходит для случаев, когда есть много горутин-читателей и ты чаще читаешь чем пишешь.

Alexey
17.06.2018
07:06:22

Roman
17.06.2018
07:11:50
На пару милисекунд, например

Google

Alexey
17.06.2018
07:12:23

Roman
17.06.2018
07:12:51
Ничего не выполняется

Alexander
17.06.2018
07:12:59
Ребят, вы немного разное понимаете под "тормозит". Ваш спор беспредметный.

Alexey
17.06.2018
07:13:10

Daniel
17.06.2018
08:54:28
Можно пример?
Он не реентерабельный. Если взять один лок два раза в одной горутине - она встанет навсегда, как и прочие потребители этого лока.

Anton
17.06.2018
08:56:20
Сама себя задедлочит?

Daniel
17.06.2018
08:57:27
ага

Anton
17.06.2018
09:16:24
Ну это получается сам себе в ногу выстрелил, можно же лочить в каком-нибудь хелпере, который в defer снимает лок

Daniel
17.06.2018
09:18:44
ага-ага
нет, на самом деле
нельзя
но это пофиг

Google

Daniel
17.06.2018
09:19:08
проблема редкая
важно, что мутекс у нас - не тред-сейф :)

Vladimir
17.06.2018
09:24:39

Daniel
17.06.2018
09:25:51
что с мутексом надо обращаться аккуратно, даже в рамках его заявленной функциональности

Vladimir
17.06.2018
09:26:04

Daniel
17.06.2018
09:27:08
например - не пытаться взять Lock от RWMutex после того, как уже взял RLock

Vladimir
17.06.2018
09:27:43
Это специальное поведение

Daniel
17.06.2018
09:31:44
это ты мне объясняешь? :)

anton
17.06.2018
09:32:21
это попытка понять, что из этого означает что мутекс не тред сейф?

Daniel
17.06.2018
09:32:43
мне кажется, вы уже поняли, что я имел в виду
соглашаться со мной не обязательно

Vladimir
17.06.2018
09:33:13
Или нет

Daniel
17.06.2018
09:34:49
ну смотри
есть канал
в принципе - можно с его помощью эффекивно устроить себе вечный дедлок не хуже, чем на мутексах
но - для этого, все же, нужны два канала
как минимум
на атомиках вообще ничего, кроме заявленного поведения, добиться не удастся

Google

Vladimir
17.06.2018
09:36:54
Ты про то, что нужно юзать правильные примитивы?

Daniel
17.06.2018
09:37:16
а вот с мутексом можно влететь прямо с ходу, попутавшись, по явной привычке, апгрейтить ридлок до райтлока
именно это я имел в виду, когда говорил, что он не потокобезопасный

Vladimir
17.06.2018
09:38:17
У вас мьютексы как в сишке? Не привязаны к данным?

Daniel
17.06.2018
09:38:39
это они и есть

Alexey
17.06.2018
09:39:01
Можно и с одним каналом влететь прямо находу, написав в него до того, как кто-то будет читать:)
Я позавчера собеседовал товарища, он как раз считал, что даже в небуферизованный канал одну запись сделать можно:)

Alexander
17.06.2018
09:40:24

Daniel
17.06.2018
09:40:36
при чем тут генерики?

Vladimir
17.06.2018
09:40:46

Daniel
17.06.2018
09:40:51
что у вас в голове вообще?

Roman
17.06.2018
09:41:05

Alexey
17.06.2018
09:41:17

Daniel
17.06.2018
09:41:27
в яве 1.0 sychchronized был, а генериков не было

Vladimir
17.06.2018
09:42:15
Ну эт не то

Daniel
17.06.2018
09:42:24
что - не то?
что вам не то?

Alexander
17.06.2018
09:42:38
при чем тут генерики?
Ну мне нужно, чтобы данные были недоступны без взятия лока. В каком-нибудь русте это делается оборачиванием данных в мьютекс Mutex::new(data). После этого доступ к данным невозможно получить без взятия лока у мьютекса. Разве есть какие-то варианты без обёртки данных в другой тип для решения этой проблемы в го?

Vladimir
17.06.2018
09:42:41
Ты про то, что объект можно пометить как синхронайзед?
Я просто в джаве не силен

Google

Daniel
17.06.2018
09:43:13

Vladimir
17.06.2018
09:43:19
Это ж по факту тот же тип обертки только встроенный в ЯП

Daniel
17.06.2018
09:43:42

Roman
17.06.2018
09:44:15

Alexander
17.06.2018
09:44:34
нет никакой этой проблемы
У вас какое-то странное понимание слова "проблема". Проблема - это задача, а задачу я описал в том же комментарии.

Vladimir
17.06.2018
09:44:35

Vladimir
17.06.2018
09:45:02

Vladimir
17.06.2018
09:45:12
Легче сделать дедлок поидее, или провтыкать лок

Daniel
17.06.2018
09:45:14

Admin
ERROR: S client not available

Vladimir
17.06.2018
09:48:30
Да. Это плохо?
Посыл в следующем: гонка возникает при обращении к даннымм, значит нужно защищать данные, а не код. По этому мьютекс с вложенными данными не позволил бы использовать его для других целей, ну или выполнить другие кейсы стрельбы в ногу

Alexander
17.06.2018
09:50:20

Vladimir
17.06.2018
09:51:08

Vladimir
17.06.2018
09:51:21

Vladimir
17.06.2018
09:51:27
А брать и снимать мьютекс не бесплатно в целом

Vladimir
17.06.2018
09:52:01
Не обязательно снимать, ты определяешь скоуп, в котором твои данные залочены
Дальше можешь просто менять сколько раз хочешь данные, и после выхода за скорее мьютекс сам снимется
{
let guard = data.lock(); //guard - смартпоинтер на данные с контекстом локнутого мьютекса
...
guard +=1;
guard-=1;
...
} //Неявный data.unlock()

Alexander
17.06.2018
09:54:43

Vladimir
17.06.2018
09:55:22
Дропается там гвард, а мьютекс анлокается

Google

Daniel
17.06.2018
09:56:48
ну

Alexander
17.06.2018
09:56:52
Кстати, дроп вполне себе явный учитывая то, что всё в языке себя ведёт так

Daniel
17.06.2018
09:56:59
в яве все так было с самой первой ее версии
а в go - нет так
и это пофиг

Vladimir
17.06.2018
09:57:33
Ну я так понял, там методы отдельные которые могут работать только синхронно, нет?
Это вроде не похоже на семантику мьютекса, скорее на критическую секцию

Daniel
17.06.2018
09:58:42
синхронизированным можно объявить блок кода или метод, причем синхронизироваться можно на любом объекте
но это все пофиг, повторяю

Alexander
17.06.2018
09:59:13

Daniel
17.06.2018
09:59:33
я вот думаю, что пора прекрашать

Roman
17.06.2018
10:06:16

Никита
17.06.2018
10:08:20
А?! (c)
Вставьте пропущенные буквы вместо символов ?!

Roman
17.06.2018
10:08:55

Artem
17.06.2018
11:25:05
Вопрос, каким образом можно заставить afero.ReadFile или ioutil.ReadFile вернуть ошибку, chmod что то не помогает, возможно из-за того что сейчас на винде.
возможно проблема в районе - https://github.com/spf13/afero/issues/150

Человек
17.06.2018
16:49:28
Здравствуйте. Хочу создать сервис через sc.exe create "MyService" binpath="C:\path\ss.exe" displayname="SuperService" start=auto, служба создается но не запускаеться, вернее я не могу запустить службу из-за ошибки timeout "The service did not respond to the start or control request in a timely fashion.". В чем проблема? Через стандарт либу svc тоже ничего не получаеться, использовать NSSM я не буду, так как приложение должно работать автономно без действий юзера, устаналвиватся как служба

Pawel
17.06.2018
16:55:37
а проблема в том, что бинарник службы виндовз должен удовлетворять определённым условиям
И если уж на то пошло, вам не нужно запускать ваш бинарник как службу если только он не использует режим ядра, что для программы на Го нонсенс

Daniel
17.06.2018
17:13:43
Почему?

Pawel
17.06.2018
17:15:29
Почему?
а какой ещё может быть смысл усложнять код, делая именно службу, а не простой экзешник? я не вижу