Compartilhar via


Segurança de threads na Biblioteca Padrão C++

As regras para acesso thread-safe a seguir se aplicam a todas as classes na Biblioteca Padrão C++. Isso inclui shared_ptr, como descrito a seguir. Às vezes, são dadas garantias maiores, por exemplo, os objetos iostream padrão, como descrito a seguir, e os tipos projetados especificamente para multithreading, como os em <atomic>.

Um objeto é thread-safe para leitura de vários threads. Por exemplo, dado um objeto A, é seguro ler A do thread 1 e do thread 2 simultaneamente.

Se um objeto estiver sendo gravado por um thread, todas as leituras e as gravações nesse objeto no mesmo thread ou em outros deverão ser protegidas. Por exemplo, dado um objeto A, se o thread 1 estiver sendo gravado em A, o thread 2 deverá ser impedido de ler de ou gravar em A.

É seguro ler e gravar em uma instância de um tipo, mesmo que outro thread esteja lendo ou gravando em uma instância diferente do mesmo tipo. Por exemplo, dados os objetos A e B do mesmo tipo, é seguro quando A está sendo gravado no thread 1 e B está sendo gravado no thread 2.

shared_ptr

Vários threads podem ler e gravar simultaneamente objetos shared_ptr diferentes, mesmo quando os objetos são cópias que compartilham a propriedade.

iostream

Os objetos iostream padrão cin, cout, cerr, clog, wcin, wcout, wcerr e wclog seguem as mesmas regras das outras classes, com esta exceção: é seguro gravar em um objeto de vários threads. Por exemplo, o thread 1 pode gravar cout ao mesmo tempo em que o thread 2. Porém, isso pode misturar a saída dos dois threads.

Dica

A leitura de um buffer de stream não é considerada uma operação segura.Em vez disso, ela é considerada um operação de gravação, porque o estado da classe muda.

Consulte também

Referência

Visão geral da Biblioteca Padrão C++