BoundedBuffer buf;
for i = 1 to items do
put work(i) to buf
end
for i = 1 to workers do
put end-marker to buf
end
con i = 1 to workers do
Worker(i);
end
Worker(i) {
while (there is work) do
get work from buf;
do work;
end
}