Pergunta

Por exemplo, o c ++ 0x interfaces de

Eu estou tendo um momento difícil descobrir quando usar cada uma destas coisas (cv, mutex e de bloqueio). Alguém por favor pode explicar ou apontar para um recurso?

Agradecemos antecipadamente.

Foi útil?

Solução

Na página que você se refere, "mutex" é o baixo nível actual sincronização primitiva. Você pode tomar um mutex e depois liberá-lo, e apenas um thread pode levá-lo a qualquer momento único (portanto, é uma sincronização primitiva). Um mutex recursiva é aquela que pode ser tomada pelo mesma enfiar várias vezes, e em seguida, ele precisa ser liberado tantas vezes pelo mesmo thread antes de outros pode levá-lo.

A "bloqueio" aqui é apenas um C ++ invólucro classe que leva um mutex em seu construtor e libera-lo no processo de destruição. É útil para o estabelecimento de sincronização para escopos C ++.

Uma variável condição é uma forma mais avançada / de alto nível de sincronização primitiva que combina uma fechadura com um mecanismo de "sinalização". É usado quando tópicos precisa esperar por um recurso se torne disponível. Um thread pode "esperar" em um CV e, em seguida, o produtor recurso pode "sinal" a variável, caso em que os tópicos que esperam para o CV ser notificado e pode continuar a execução. Um mutex é combinado com CV para evitar a condição de corrida onde um fio começa a esperar em um CV, ao mesmo tempo outro segmento quer sinalizar que; então não é controlável se o sinal é entregue ou se perde.

Outras dicas

Eu não sou muito familiarizado w / C ++ 0x assim que tomar esta resposta w / um grão de sal.

re: Mutex vs. fechaduras: A partir da documentação você postou, parece um mutex é um objeto que representa um mutex OS, enquanto um lock é um objeto que detém uma exclusão mútua para facilitar a padrão RAII .

Variáveis ??de condição são um mecanismo útil para associar um bloqueio / sinalização mecanismo (sinal + espera) com um mecanismo de exclusão mútua, mas mantê-los dissociado no sistema operacional para que você como programador de sistema pode escolher a associação entre condvar e mutex. (Útil para lidar com múltiplos conjuntos de objetos simultaneamente acessados) Rob Krten tem algum boas explicações sobre condvars em um dos capítulos on-line de sua livro sobre QNX .

Quanto referências gerais:. Este livro (ainda não out) parece interessante

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top