|
| 1 | +\begin{Verbatim}[commandchars=\\\{\},codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax}] |
| 2 | +\PYG{k}{pub}\PYG{+w}{ }\PYG{k}{struct} \PYG{n+nc}{ThreadPool}\PYG{+w}{ }\PYG{p}{\PYGZob{}} |
| 3 | +\PYG{+w}{ }\PYG{n}{workers}: \PYG{n+nb}{Vec}\PYG{o}{\PYGZlt{}}\PYG{n}{Worker}\PYG{o}{\PYGZgt{}}\PYG{p}{,} |
| 4 | +\PYG{+w}{ }\PYG{n}{sender}: \PYG{n+nc}{mpsc}::\PYG{n}{Sender}\PYG{o}{\PYGZlt{}}\PYG{n}{Job}\PYG{o}{\PYGZgt{}}\PYG{p}{,} |
| 5 | +\PYG{p}{\PYGZcb{}} |
| 6 | +\PYG{k}{struct} \PYG{n+nc}{Job}\PYG{p}{;} |
| 7 | +\PYG{k}{impl}\PYG{+w}{ }\PYG{n}{ThreadPool}\PYG{+w}{ }\PYG{p}{\PYGZob{}} |
| 8 | +\PYG{+w}{ }\PYG{k}{pub}\PYG{+w}{ }\PYG{k}{fn} \PYG{n+nf}{new}\PYG{p}{(}\PYG{n}{size}: \PYG{k+kt}{usize}\PYG{p}{)}\PYG{+w}{ }\PYGZhy{}\PYGZgt{} \PYG{n+nc}{ThreadPool}\PYG{+w}{ }\PYG{p}{\PYGZob{}} |
| 9 | +\PYG{+w}{ }\PYG{n+nf+fm}{assert!}\PYG{p}{(}\PYG{n}{size}\PYG{+w}{ }\PYG{o}{\PYGZgt{}}\PYG{+w}{ }\PYG{l+m+mi}{0}\PYG{p}{);} |
| 10 | + |
| 11 | +\PYG{+w}{ }\PYG{k+kd}{let}\PYG{+w}{ }\PYG{p}{(}\PYG{n}{sender}\PYG{p}{,}\PYG{+w}{ }\PYG{n}{receiver}\PYG{p}{)}\PYG{+w}{ }\PYG{o}{=}\PYG{+w}{ }\PYG{n}{mpsc}::\PYG{n}{channel}\PYG{p}{();} |
| 12 | +\PYG{+w}{ }\PYG{k+kd}{let}\PYG{+w}{ }\PYG{n}{receiver}\PYG{+w}{ }\PYG{o}{=}\PYG{+w}{ }\PYG{n}{Arc}::\PYG{n}{new}\PYG{p}{(}\PYG{n}{Mutex}::\PYG{n}{new}\PYG{p}{(}\PYG{n}{receiver}\PYG{p}{));} |
| 13 | +\PYG{+w}{ }\PYG{k+kd}{let}\PYG{+w}{ }\PYG{k}{mut}\PYG{+w}{ }\PYG{n}{workers}\PYG{+w}{ }\PYG{o}{=}\PYG{+w}{ }\PYG{n+nb}{Vec}::\PYG{n}{with\PYGZus{}capacity}\PYG{p}{(}\PYG{n}{size}\PYG{p}{);} |
| 14 | +\PYG{+w}{ }\PYG{k}{for}\PYG{+w}{ }\PYG{n}{id}\PYG{+w}{ }\PYG{k}{in}\PYG{+w}{ }\PYG{l+m+mi}{0}\PYG{o}{..}\PYG{n}{size}\PYG{+w}{ }\PYG{p}{\PYGZob{}} |
| 15 | +\PYG{+w}{ }\PYG{n}{workers}\PYG{p}{.}\PYG{n}{push}\PYG{p}{(}\PYG{n}{Worker}::\PYG{n}{new}\PYG{p}{(}\PYG{n}{id}\PYG{p}{,}\PYG{+w}{ }\PYG{n}{Arc}::\PYG{n}{clone}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{receiver}\PYG{p}{)));} |
| 16 | +\PYG{+w}{ }\PYG{p}{\PYGZcb{}} |
| 17 | +\PYG{+w}{ }\PYG{n}{ThreadPool}\PYG{+w}{ }\PYG{p}{\PYGZob{}}\PYG{+w}{ }\PYG{n}{workers}\PYG{p}{,}\PYG{+w}{ }\PYG{n}{sender}\PYG{+w}{ }\PYG{p}{\PYGZcb{}} |
| 18 | +\PYG{+w}{ }\PYG{p}{\PYGZcb{}} |
| 19 | +\PYG{+w}{ }\PYG{c+c1}{// \PYGZhy{}\PYGZhy{}snip\PYGZhy{}\PYGZhy{}} |
| 20 | +\PYG{+w}{ }\PYG{k}{pub}\PYG{+w}{ }\PYG{k}{fn} \PYG{n+nf}{execute}\PYG{o}{\PYGZlt{}}\PYG{n}{F}\PYG{o}{\PYGZgt{}}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n+nb+bp}{self}\PYG{p}{,}\PYG{+w}{ }\PYG{n}{f}: \PYG{n+nc}{F}\PYG{p}{)} |
| 21 | +\PYG{+w}{ }\PYG{k}{where} |
| 22 | +\PYG{+w}{ }\PYG{n}{F}: \PYG{n+nb}{FnOnce}\PYG{p}{()}\PYG{+w}{ }\PYG{o}{+}\PYG{+w}{ }\PYG{n+nb}{Send}\PYG{+w}{ }\PYG{o}{+}\PYG{+w}{ }\PYG{o}{\PYGZsq{}}\PYG{n+nb}{static}\PYG{p}{,} |
| 23 | +\PYG{+w}{ }\PYG{p}{\PYGZob{}} |
| 24 | +\PYG{+w}{ }\PYG{p}{\PYGZcb{}} |
| 25 | +\PYG{p}{\PYGZcb{}} |
| 26 | +\end{Verbatim} |
0 commit comments