| 43 | | N:: scan at least this many slots |
| 44 | | (if scan N slots and have enough jobs to send, stop) |
| 45 | | M:: scan at most this many slots |
| 46 | | (even if don't have enough jobs to send yet) |
| 47 | | L:: if scan this many locked slots, print warning msg |
| 48 | | (should increase shmem size) |
| | 47 | N:: scan at least this many slots (if scan N slots and have enough jobs to send, stop) |
| | 48 | M:: scan at most this many slots (even if don't have enough jobs to send yet) |
| | 49 | L:: if scan this many locked slots, print warning msg (should increase shmem size) |
| 58 | | i = i+1 % array_size |
| 59 | | slots_scanned++ |
| 60 | | if slots_scanned > M |
| 61 | | break |
| 62 | | if shmem[i] is empty |
| 63 | | continue |
| 64 | | if shmem[i] is locked |
| 65 | | slots_locked++ |
| 66 | | continue |
| 67 | | j = shmem[i] |
| 68 | | if !fast_filter(j) continue; |
| 69 | | v = v(h, j) |
| 70 | | if v > lowest score in x |
| 71 | | lock j |
| 72 | | release semaphore |
| 73 | | if !slow_filter(j) |
| 74 | | acquire semaphore |
| 75 | | unlock j |
| 76 | | continue |
| 77 | | acquire semaphore |
| 78 | | if x satisfies client's work request |
| 79 | | unlock and remove lowest-score element of x |
| 80 | | add j to x |
| 81 | | if x satisfies client's work request and slots_scanned >= N |
| 82 | | break; |
| | 59 | i = i+1 % array_size |
| | 60 | slots_scanned++ |
| | 61 | if slots_scanned > M |
| | 62 | break |
| | 63 | if shmem[i] is empty |
| | 64 | continue |
| | 65 | if shmem[i] is locked |
| | 66 | slots_locked++ |
| | 67 | continue |
| | 68 | j = shmem[i] |
| | 69 | if !job_feasible_fast(j) continue; |
| | 70 | v = v(h, j) |
| | 71 | if v <= lowest score in x |
| | 72 | continue |
| | 73 | S = jobs in x with value >= v |
| | 74 | if !job_set_feasible(S+j) |
| | 75 | continue |
| | 76 | lock j |
| | 77 | release semaphore |
| | 78 | if !job_feasible_slow(j) |
| | 79 | acquire semaphore |
| | 80 | unlock j |
| | 81 | continue |
| | 82 | acquire semaphore |
| | 83 | add j to x |
| | 84 | while (x minus lowest-val element) satisfies work request |
| | 85 | remove lowest-val element of x |
| | 86 | while !job_set_feasible(x) |
| | 87 | remove lowest-value element of x |
| | 88 | if x satisfies work request and slots_scanned >= N |
| | 89 | break; |