It is disproportionately hard to do multithreading in C and C++ because the blast radius is huge and the tooling is not good. Languages with runtimes (Java, C#, etc.) give you lots of analysis and well-defined failure modes (in most cases), and Rust prevents almost all related bugs through the type system.

In terms of effort or expense, making any C or C++ program multithreaded is at least an order of magnitude harder/more expensive, even when designed for it from the beginning, so lots of programs aren't multithreaded that could be.