| 1735 | lock.unlock(); |
| 1736 | } |
| 1737 | void attachJob(ThreadPool *pool, Job *job) { |
| 1738 | lock.lock(); |
| 1739 | job->pool = pool; |
| 1740 | job->id = jobid++; |
| 1741 | acquireShared(job); |
| 1742 | if (job->ready()) { |
| 1743 | global_queue.push(job); |
| 1744 | cond.signal(); |
| 1745 | } |
| 1746 | else if (job->pending_index < 0) { |
| 1747 | job->pool = pool; |
| 1748 | job->pending_index = pending.size(); |
| 1749 | pending.push_back(job); |
| 1750 | } |
| 1751 | lock.unlock(); |
| 1752 | } |
| 1753 | void detachJob(Job *job) { |
| 1754 | lock.lock(); |
| 1755 | long i = job->pending_index; |