43#define SCIPompInitLock(lock) (omp_init_lock(lock), SCIP_OKAY)
44#define SCIPompDestroyLock(lock) (omp_destroy_lock(lock))
45#define SCIPompAcquireLock(lock) (omp_set_lock(lock), SCIP_OKAY)
46#define SCIPompReleaseLock(lock) (omp_unset_lock(lock), SCIP_OKAY)
49#define SCIPompInitCondition(condition) ( omp_init_lock(&(condition)->_lock), \
50 (condition)->_waiters = 0, (condition)->_waitnum = 0, (condition)->_signals = 0, SCIP_OKAY )
51#define SCIPompDestroyCondition(condition) do { assert((condition)->_waiters == 0); assert((condition)->_waitnum == 0); assert((condition)->_signals == 0); omp_destroy_lock(&(condition)->_lock); } while(0)
109 SCIP_Bool blockwhenfull
173 job->retcode = (*(
job->jobfunc))(
job->args);
209 waitnum = ++condition->_waitnum;
211 ++condition->_waiters;
216 #pragma omp taskyield
219 while( condition->_signals <
waitnum );
221 --condition->_waiters;
223 if( condition->_waiters == 0 )
225 condition->_signals = 0;
226 condition->_waitnum = 0;
248 waitnum = ++condition->_waitnum;
250 ++condition->_waiters;
255 #pragma omp taskyield
258 while( condition->_signals <
waitnum );
260 --condition->_waiters;
262 if( condition->_waiters == 0 )
264 condition->_signals = 0;
265 condition->_waitnum = 0;
372 #pragma omp task firstprivate(newjob)
389 if( condition->_waitnum > condition->_signals )
390 ++condition->_signals;
406 condition->_signals = condition->_waitnum;
438 (*job)->jobid = jobid;
439 (*job)->jobfunc = jobfunc;
441 (*job)->nextjob =
NULL;
454 #pragma omp atomic capture
598 SCIP_Bool blockwhenfull
685 (*condition)->_waiters = 0;
686 (*condition)->_waitnum = 0;
687 (*condition)->_signals = 0;
697 assert((*condition)->_waiters == 0);
698 assert((*condition)->_waitnum == 0);
699 assert((*condition)->_signals == 0);
#define SCIP_CALL_ABORT(x)
assert(minobj< SCIPgetCutoffbound(scip))
memory allocation routines
#define BMSfreeMemory(ptr)
#define BMSallocMemoryArray(ptr, num)
#define BMSfreeMemoryArray(ptr)
#define BMSallocMemory(ptr)
public methods for message output
SCIP_JOBQUEUE finishedjobs
SCIP_CONDITION jobfinished
struct SCIP_Job * nextjob
SCIP_RETCODE(* jobfunc)(void *args)
the type definitions for the SCIP parallel interface
#define SCIPompInitLock(lock)
#define SCIPompAcquireLock(lock)
SCIP_RETCODE SCIPtpiWaitCondition(SCIP_CONDITION *condition, SCIP_LOCK *lock)
SCIP_RETCODE SCIPtpiCreateJob(SCIP_JOB **job, int jobid, SCIP_RETCODE(*jobfunc)(void *args), void *jobarg)
SCIP_RETCODE SCIPtpiSignalCondition(SCIP_CONDITION *condition)
static SCIP_RETCODE jobQueueAddJob(SCIP_JOB *newjob)
SCIP_RETCODE SCIPtpiAcquireLock(SCIP_LOCK *lock)
#define SCIPompReleaseLock(lock)
#define SCIPompDestroyLock(lock)
int SCIPtpiGetNumThreads()
SCIP_RETCODE SCIPtpiExit(void)
static void executeJob(SCIP_JOB *job)
SCIP_RETCODE SCIPtpiBroadcastCondition(SCIP_CONDITION *condition)
static SCIP_RETCODE freeJobQueue(void)
static void jobQueueProcessJob(void)
SCIP_RETCODE SCIPtpiSubmitJob(SCIP_JOB *job, SCIP_SUBMITSTATUS *status)
void SCIPtpiDestroyLock(SCIP_LOCK **lock)
SCIP_RETCODE SCIPtpiCollectJobs(int jobid)
static SCIP_RETCODE SCIPompWaitCondition(SCIP_CONDITION *condition, omp_lock_t *lock)
static SCIP_RETCODE createJobQueue(int nthreads, int qsize, SCIP_Bool blockwhenfull)
static SCIP_Bool isJobRunning(int jobid)
static SCIP_Bool isJobWaiting(int jobid)
void SCIPtpiDestroyCondition(SCIP_CONDITION **condition)
#define SCIPompDestroyCondition(condition)
int SCIPtpiGetNewJobID(void)
SCIP_RETCODE SCIPtpiInitLock(SCIP_LOCK **lock)
int SCIPtpiGetThreadNum()
SCIP_RETCODE SCIPtpiReleaseLock(SCIP_LOCK *lock)
SCIP_RETCODE SCIPtpiInitCondition(SCIP_CONDITION **condition)
SCIP_RETCODE SCIPtpiInit(int nthreads, int queuesize, SCIP_Bool blockwhenfull)
#define SCIPompInitCondition(condition)
enum SCIP_Retcode SCIP_RETCODE
enum SCIP_Submitstatus SCIP_SUBMITSTATUS