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
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;
418 return omp_get_num_threads();
425 return omp_get_thread_num();
438 (*job)->jobid = jobid;
439 (*job)->jobfunc = jobfunc;
440 (*job)->args = jobarg;
441 (*job)->nextjob =
NULL;
451 static int currentjobid = 0;
454 #pragma omp atomic capture
455 jobid = ++currentjobid;
509 if( currjob->
jobid == jobid )
548 if( currjob->
jobid == jobid )
560 if( prevjob !=
NULL )
598 SCIP_Bool blockwhenfull
637 omp_init_lock(&(*lock)->lock);
648 omp_destroy_lock(&(*lock)->lock);
657 omp_set_lock(&
lock->lock);
666 omp_unset_lock(&
lock->lock);
684 omp_init_lock(&(*condition)->_lock);
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);
701 omp_destroy_lock(&(*condition)->_lock);
#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