def lock_and_collect(generation=-1):
    """
    Usunięcie obiektów w sposób zapewniający bezpieczeństwo wątku
    """
    me = PyThreadState_GET()
    if gc_mutex.owner == me:
        # Żądanie działania przez mechanizm usuwania nieużytków
        return
    Py_BEGIN_ALLOW_THREADS
    gc_mutex.lock.acquire()
    Py_END_ALLOW_THREADS
    gc_mutex.owner = me
    try:
        if generation >= 0:
            return collect_with_callback(generation)
        else:
            return collect_generations()
    finally:
        gc_mutex.owner = NULL
        gc_mutex.lock.release()
