←back to thread

Go channels are bad

(www.jtolds.com)
298 points jtolds | 2 comments | | HN request time: 0.536s | source
Show context
Jabbles ◴[] No.11210740[source]
Effective Go has always said:

Do not communicate by sharing memory; instead, share memory by communicating.

This approach can be taken too far. Reference counts may be best done by putting a mutex around an integer variable, for instance.

https://golang.org/doc/effective_go.html#sharing

replies(3): >>11210862 #>>11210978 #>>11210990 #
poizan42 ◴[] No.11210862[source]
Reference counts are best done using interlocked increment/decrement primitives.
replies(2): >>11210871 #>>11211088 #
chrisseaton ◴[] No.11211088[source]
I wonder if there are any compilers which can replace

    mutex.lock { x++ }
With a 'lock xaddl x 1' instruction.
replies(4): >>11211325 #>>11211581 #>>11211703 #>>11212909 #
1. mike_hearn ◴[] No.11211703[source]
It's not quite the same thing but recent JVMs can translate synchronised blocks into Intel TSX transactions, which means multiple threads can run inside the lock at once, with rollback and retry if interference is detected at the hardware (cache line) level. So yeah .... almost. But it's fancy and cutting edge stuff.
replies(1): >>11211715 #
2. ◴[] No.11211715[source]