On Thu, 16 Jul 2015 07:57:10 +0000 aki via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com> wrote:
> I can't resolve the compile errors: > > import core.thread; > class DerivedThread : Thread { > int count = 0; > this() { > super(&run); > } > private void run() { > inc(); //testThread.d(8): Error: shared method > testThread.DerivedThread.inc is not callable using a non-shared > object > } > synchronized void inc() { > ++count; //testThread.d(11): Deprecation: > read-modify-write operations are not allowed for shared variables. > Use core.atomic.atomicOp!"+="(this.count, 1) instead. > } > } > void main() { > auto thr = new DerivedThread(); > thr.start(); > thr.inc(); //testThread.d(17): Error: shared method > testThread.DerivedThread.inc is not callable using a non-shared > object > thr.join(); > } > > > 1. Should I declare thr as shared? But > auto thr = new shared DerivedThread(); > does not resolve it. > > 2. Why "++count" cause an error? I think it is safe because > it is marked as synchronized. If it is forced to use atomicOp > all the time, it's painful. > > 3. Are there any tutorials about using Thread class? > > Aki. > import core.thread; class DerivedThread : Thread { shared int count = 0; __gshared int count2 = 0; this() { super(&run); } private void run() { inc(); inc2(); } void inc() { import core.atomic; atomicOp!"+="(this.count, 1); } void inc2() { synchronized { ++count2; } } } void main() { auto thr = new DerivedThread(); thr.start(); thr.inc(); thr.inc2(); thr.join(); }