читайте об этом здесь.
Мне нужно реализовать разновидность такого интерфейса, скажем, у нас есть большой объем памяти для управления, должны быть функции getmem(size) и free(указатель на блок), которые должны убедиться, что free(указатель на блок) действительно может освободить память тогда и только тогда, когда все процессы, использующие этот блок, выполняются с его использованием.
Я думал о том, чтобы определить структуру Collectable
как указатель на блок, его размер и количество процессов, использующих его. затем всякий раз, когда процесс использует экземпляр структуры Collectable
в первый раз, он должен явно увеличивать счетчик, и всякий раз, когда процесс free()
использует его, счетчик уменьшается.
Проблема с этим подходом заключается в том, что все процессы должны реагировать на этот интерфейс и заставлять его явно работать: всякий раз, когда присваивается собираемый указатель экземпляру, процесс должен явно включать этот счетчик, что меня не удовлетворяет, я подумал, может быть, есть способ создать макрос, чтобы это происходило неявно при каждом назначении?
Я некоторое время ищу способы решения этой проблемы, поэтому другие подходы и идеи были бы замечательными...
РЕДАКТИРОВАТЬ: приведенный выше подход не удовлетворяет меня не только потому, что он не Это выглядит красиво, но в основном потому, что я не могу предположить, что код работающего процесса позаботится об обновлении моего счетчика.Мне нужен способ убедиться, что это сделано без изменения кода процесса...