Обычно говорят, что неизменяемые структуры данных более «дружественны» для программирования параллелизма. Объяснение состоит в том, что если структура данных изменена и один поток изменяет ее, тогда другой поток будет «видеть» предыдущий режим структуры данных.Является ли неизменяемость более полезной для параллелизма?
Хотя невозможно изменить неизменяемую структуру данных, если нужно ее изменить, можно создать новую структуру данных и дать ей ссылку на «старую» структуру данных.
На мой взгляд, эта ситуация также не является потокобезопасной, поскольку один поток может обращаться к старой структуре данных, а второй - к новой структуре данных. Если да, то почему неизменная структура данных считается более потокобезопасной?
«Если структура данных изменена и один поток изменяет ее, то другой поток« увидит »предыдущий режим структуры данных». Это часто бывает не так просто. На всех языках, которые я знаю, поведение несинхронизированной записи и чтения не определено. Например, если структура состоит из нескольких байтов, некоторые байты могут быть перезаписаны новыми данными, в то время как другие все еще содержат старые данные, что может привести к недопустимому состоянию для определенных структур – KABoissonneault
, поэтому вы действительно согласитесь со мной в том, что неизменность Решить проблему параллелизма. – CrazySynthax
Неизменность обычно означает «невозможность записи». Параллельные несинхронизированные чтения обычно определяются поведением, в то время как любые одновременные несинхронизированные чтения-записи или записи-записи не определены. То, что вы описываете в своем вопросе, не является нарушением этого принципа. – KABoissonneault