Ну, что значит pure c… Имхо, это когда нет сторонних include. Mutex, Event… WaitForSingleObject, WaitForMultiplyObject, select… функции не языка С, а ОС. В общем, если учите системное программирование (я так понимаю, именно это вы и делаете) — закопайте pThread откуда выкопали, и используйте Api OC. Иначе выше понимание того что происходит не будет отличаться от знаний рядового php-ника, верстальщика, других нижних каст программирования.
Нет, не чтобы атомарно, а чтобы безопасно. Разные вещи. Атомарно — и без мьютексов все отлично. Мьютексы нужны для того, чтобы одновременно не трогать разными способами одни ресурсы, иначе просто эти ресурсы поломаются.
И все эти варианты медленней чем вложенные цикли… Ребят, вы чего?! Что тут происходит? Это шутки какие-то, или что?
Можно даже динамическое программирование прикрутить, и поск в ширину, но зачем?!
Количество вариантов — a.count * b.count * c.count. Это не очевидно? То бишь, в любом случае нужно будет пройтись по всем. То, что я написал — не имеет избыточной сложности, потребления памяти. Не понятно, что вам не нравится?