Mercurial > repos > rliterman > csp2
diff CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/bbmap-39.01-1/current/kmer/OwnershipThread.java @ 68:5028fdace37b
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 16:23:26 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/bbmap-39.01-1/current/kmer/OwnershipThread.java Tue Mar 18 16:23:26 2025 -0400 @@ -0,0 +1,75 @@ +package kmer; + +import java.util.ArrayList; +import java.util.concurrent.atomic.AtomicInteger; + +import shared.KillSwitch; +import shared.Shared; +import shared.Tools; + +public class OwnershipThread extends Thread { + + public static void clear(AbstractKmerTable[] tables){ + process(tables, CLEAR); + } + + public static void initialize(AbstractKmerTable[] tables){ + process(tables, INITIALIZE); + } + + private static void process(AbstractKmerTable[] tables, int mode){ + if(tables.length<2){ + if(mode==INITIALIZE){ + for(AbstractKmerTable akt : tables){akt.initializeOwnership();} + }else if(mode==CLEAR){ + for(AbstractKmerTable akt : tables){akt.clearOwnership();} + }else{ + KillSwitch.kill("Bad mode: "+mode); + } + return; + } + final int threads=Tools.min(Shared.threads(), tables.length); + final AtomicInteger next=new AtomicInteger(0); + ArrayList<OwnershipThread> alpt=new ArrayList<OwnershipThread>(threads); + for(int i=0; i<threads; i++){alpt.add(new OwnershipThread(tables, mode, next));} + for(OwnershipThread pt : alpt){pt.start();} + + for(OwnershipThread pt : alpt){ + while(pt.getState()!=Thread.State.TERMINATED){ + try { + pt.join(); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + } + + public OwnershipThread(AbstractKmerTable[] tables_, int mode_, AtomicInteger next_){ + tables=tables_; + mode=mode_; + next=next_; + } + + @Override + public void run(){ + for(int i=next.getAndIncrement(); i<tables.length; i=next.getAndIncrement()){ + if(mode==INITIALIZE){ + tables[i].initializeOwnership(); + }else if(mode==CLEAR){ + tables[i].clearOwnership(); + }else{ + KillSwitch.kill("Bad mode: "+mode); + } + } + } + + private final AbstractKmerTable[] tables; + private final AtomicInteger next; + private final int mode; + + public static final int INITIALIZE=0; + public static final int CLEAR=1; + +}