#include "util/evsel.h"
 #include "util/debug.h"
 #include "util/mmap.h"
+#include "util/mutex.h"
 #include "util/target.h"
 #include "util/session.h"
 #include "util/tool.h"
        return record__write(rec, NULL, event, event->header.size);
 }
 
+static struct mutex synth_lock;
+
 static int process_locked_synthesized_event(struct perf_tool *tool,
                                     union perf_event *event,
                                     struct perf_sample *sample __maybe_unused,
                                     struct machine *machine __maybe_unused)
 {
-       static pthread_mutex_t synth_lock = PTHREAD_MUTEX_INITIALIZER;
        int ret;
 
-       pthread_mutex_lock(&synth_lock);
+       mutex_lock(&synth_lock);
        ret = process_synthesized_event(tool, event, sample, machine);
-       pthread_mutex_unlock(&synth_lock);
+       mutex_unlock(&synth_lock);
        return ret;
 }
 
        }
 
        if (rec->opts.nr_threads_synthesize > 1) {
+               mutex_init(&synth_lock);
                perf_set_multithreaded();
                f = process_locked_synthesized_event;
        }
                                                    rec->opts.nr_threads_synthesize);
        }
 
-       if (rec->opts.nr_threads_synthesize > 1)
+       if (rec->opts.nr_threads_synthesize > 1) {
                perf_set_singlethreaded();
+               mutex_destroy(&synth_lock);
+       }
 
 out:
        return err;