Transpiled version (9250L) is out of date.
sclass FastCollab is ICollab, AutoCloseable { settable bool useMainThread = true; volatile settable bool isDone; gettable int coresToUse; FastCollabWorker[] workers; AtomicReferenceArray<Runnable> workArray; // 0 = spin-wait, otherwise time to sleep in milliseconds settable int sleepTime = 0; settable PingSource interruptor = new; static final Runnable DONE = r { fail("Collab done") }; *(int coresToUse) { this.coresToUse = max(1, coresToUse); workArray = new AtomicReferenceArray(this.coresToUse); } public void addWork(Runnable work) { if (work == null) ret; for (int i = 0; i < workArray.length(); i++) if (workArray.compareAndSet(i, null, work)) ret; // Everyone is busy - do the work ourselves work.run(); } // returns null => sleep // returns DONE => all work done public Runnable grabWork(int workerIndex) { if (isDone) ret DONE; Runnable work = workArray.get(workerIndex); if (work != null) workArray.set(workerIndex, null); ret work; } public void done { isDone(true); } toString { ret "FastCollab*" + n2(coresToUse); } run { workers = new FastCollabWorker[coresToUse]; for i to coresToUse: workers[i] = new FastCollabWorker(this, i).interruptor(interruptor); int iFirst = useMainThread ? 1 : 0; for (int i = iFirst; i < coresToUse; i++) startThread(workers[i]); if (useMainThread) workers[0].run(); for (int i = iFirst; i < coresToUse; i++) workers[i].join(); } close { interruptor().cancel(); } }
Began life as a copy of #1035564
download show line numbers debug dex old transpilations
Travelled to 3 computer(s): elmgxqgtpvxh, mowyntqkapby, mqqgnosmbjvj
No comments. add comment
| Snippet ID: | #1035567 |
| Snippet name: | FastCollab - code parallelizer using spin waits [OK] |
| Eternal ID of this version: | #1035567/15 |
| Text MD5: | b0dcc18999e567fcdb0152408410039f |
| Author: | stefan |
| Category: | javax / parallelism |
| Type: | JavaX fragment (include) |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2022-11-03 19:51:58 |
| Source code size: | 1676 bytes / 61 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 624 / 800 |
| Version history: | 14 change(s) |
| Referenced in: | [show references] |