решил, и я очень раздражен этим.
Я хотел отправить Producer * в качестве аргумента функции, которую запускает Pthread, поэтому я использовал & (* iter), где iter - итератор, работающий с вектором производителей.
Я не заметил, что это был (по праву) вектор , что означало, что я отправлял Producer * *, который дал неопределенные результаты. Grrrrr. Очевидно, я не заметил этого, потому что Pthreads находится в чистом C и поэтому использует void *, поскольку это единственный способ принять любой тип аргументов.