Escolar Documentos
Profissional Documentos
Cultura Documentos
Semáforos∗
Felipe Santos Sarmanho Paulo Sérgio Lopes de Souza Simone do Rocio Senger de Souza
Adenilso da Silva Simão
2
reads participam da computação. A thread mestre (T 0) é res- aresta de sincronização em que o nó 101 representa a função
ponsável por inicializar as variáveis, criar e esperar a finaliza- sem_post (send) e o nó 52 representa a função sem_wait (re-
ção das threads. A thread produtora (T 1) é responsável por ceive).
inserir elementos no buffer e a thread consumidora (T 2) por
consumir os elementos do buffer. Observe que cada instrução
do programa é representada por um nó no grafo. O valor en-
tre comentários (/* e */), ao lado direito do programa, indica o
número do nó no grafo que representa a instrução. A Figura 1
apresenta o P CF G resultante do mapeamento aqui proposto.
Nessa figura as threads mestre, produtora e consumidora es-
tão representadas por T 0, T 1 e T 2, respectivamente.
3
como uma função sem_post sob um semáforo arbitrário "cre- se a thread produtora (t1 ) executa o sem_post em mutex (nó
ate_t"(com valor inicial 0) e o primeiro nó do CF Gt é tratado 101 ) e na seqüência executa o sem_wait (nó 61 ), caracteri-
com uma função sem_wait sob este semáforo. Assim a fun- zando a aresta intra-thread (101 , 61 ). Essa questão precisa
ção de criação de threads representa uma sincronização que ser adaptada para completar a representação da sincronização
informa quando uma thread está apta a iniciar sua execução. de programas multithreads por meio do P CF G.
Por exemplo, a aresta (80 , 11 ) representa uma aresta de sin-
cronização relativa à criação da thread t1 . 6 Conclusões
Tratamento semelhante foi aplicado à função pthread_join Neste trabalho foi apresentada a aplicação do modelo de
visto que esta faz a sincronização da thread que a chamou teste P CF G em programas multithreads. O teste de progra-
com o fim da execução da thread referenciada. Assim, o nó mas concorrentes apresenta dificuldades adicionais devido a
que representa a finalização da execução de uma thread (seja concorrência, não-determinismo, comunicação e sincroniza-
por uma chamada pthread_exit, return, exit, ou algo seme- ção, características intrínsecas desse tipo de programa.
lhante) é conectado ao nó que representa a chamada à função Os resultados obtidos com a aplicação do modelo P CF G
pthread_join sob a thread finalizada. A aresta (122 , 110 ), na no contexto de programas multithreads indicam que é possí-
Figura 1, exemplifica uma aresta de sincronização relativa à vel utilizar esse modelo como base para elaboração futura de
finalização de uma thread. um modelo apropriado para esses programas. As adaptações
Por fim, agregam-se informações relativas à definição e e extensões apontadas na Seção 5 são necessárias para tratar
ao uso de variáveis (privadas e compartilhadas) ao P CF G, particularidades de programas multithreads.
segundo o modelo proposto. Os próximos passos neste trabalho envolvem o tratamento
de todas as questões levantadas neste artigo com o objetivo
5 Extensões maior de propor um modelo de teste relevante para progra-
mas multithreads considerando também trabalhos correlatos
O mapeamento de programas multithreads para o modelo [7, 8, 4, 2]. Também serão estudados e adaptados os critérios
P CF G indica que é factível usá-lo no contexto de programas de teste propostos em Vergilio et al. [7] para o contexto de
multithreads. Para tanto, algumas adaptações são necessárias programas multithreads. Um protótipo da ferramenta, deno-
a fim de tratar características próprias desses programas. minada ValiPthread, para automatizar a aplicação do modelo
A primeira adaptação se faz necessária para recuperar in- está em sua fase inicial de desenvolvimento.
formações referentes à comunicação que ocorre em progra-
mas multithreads. Quando são considerados programas con-
Referências
correntes com passagem de mensagem, o modelo P CF G
trata ambas as comunicações e sincronizações com o uso das [1] R. H. Carver and K.-C. Tai. Modern Multithreading: Im-
arestas do tipo s-uso dado que essas arestas associam nós send plementing, Testing, and Debugging Multithreaded Java and
a nós receive. Quando há o casamento de sends e receives é C++/Pthreads/Win32 Programs. Wiley-Interscience, 2005.
caracterizada uma comunicação e uma sincronização. Assim, [2] O. Edelstein, E. Farchi, E. Goldin, Y. Nir, G. Ratsaby, and S. Ur.
a comunicação é explícita e evidenciada pelo P CF G. Em Framework for testing multi-threaded Java programs. Con-
programas multithread a ocorrência de uma sincronização currency and Computation: Practice and Experience, 15(3–
sob semáforos não envolve explicitamente uma comunicação. 5):485–499, Mar./Apr. 2003.
[3] A. Grama, A. Gupta, G. Karypis, and V. Kumar. Introduction to
A comunicação ocorre implicitamente, por meio de definição
Parallel Computing. Addison-Wesley Publishing; 2nd edition,
e uso de variáveis compartilhadas, e o modelo P CF G não é One Jacob Way, Reading, MA 01867-3999, second edition, Jan.
capaz de explicitar essa informação. Por exemplo, os nós 71 2003.
(definição) e 82 (uso) no grafo da Figura 1 caracterizam uma [4] Y. Lei and R. Carver. Reachability testing of concurrent
possível comunicação sob a variável queue. Assim, deverão programs. Software Engineering, IEEE Transactions on,
ser elaborados meios de evidenciar a comunicação. 32(6):382–403, June 2006.
A segunda adaptação necessária refere-se à ocorrência de [5] R. S. Pressman. Software Engineering: A Practitioner’s Appro-
ach. McGraw-Hill, New York, NY, sixth edition edition, 2005.
arestas de sincronização intra-thread. O modelo P CF G não
[6] S. Rapps and E. Weyuker. Selecting software test data using
prevê que um processo possa, em um primeiro momento, data flow information. Software Engineering, IEEE Transacti-
enviar uma mensagem e, em um momento subseqüente, o ons on, SE-11(4):367–375, April 1985.
mesmo processo receber a mensagem. Então as arestas de [7] S. R. Vergilio, S. R. S. Souza, and P. S. L. Souza. Cove-
sincronização são sempre inter-processos. No entanto, em rage testing criteria for message-passing parallel programs. In
programas multithreads é comum que uma thread que faça o LATW2005 - 6th IEEE Latin-American Test Workshop, pages
sem_post em um semáforo em seguida faça o sem_wait sob 161–166, Salvador, Ba, 2005.
[8] C.-S. D. Yang and L. L. Pollock. All-uses testing of shared
o mesmo semáforo, ou seja, a mesma thread que produz um
memory parallel programs. Softw. Test, Verif. Reliab, 13(1):3–
token o consome. Neste caso estaria caracterizada uma aresta
24, 2003.
de sincronização intra-thread. Na Figura 1 é o que acontece