Everybody stand back! I know pstricks
So, despite the occasional mocking from my friends, I continue to write presentations in Latex using prosper and pstricks, hoping that when the time comes I'll be able to save the day. In this case I wanted to create images that exhibit the dining philosophers problem for a presentation about synchronization in multithreading environments.
Here's one that exhibits a deadlock: (L and W stands for Locked and Waiting respectively)
And here's the Latex code:
\listfiles \documentclass[a4paper]{article} \usepackage{pstricks} \usepackage{pst-node} \usepackage{multido} \usepackage{calc} \begin{document} \definecolor{DarkBlue1}{rgb}{.031,.251,.420} \begin{pspicture}(12,10) \psset{linewidth=2pt} \pnode(6, 5){O} % center \SpecialCoor \pscircle[fillcolor=lightgray,fillstyle=solid](O){1} \pscircle(O){4} % philosophers and forks \newcounter{degp} \newcounter{degf} \setcounter{degp}{0} \setcounter{degf}{36} \multido{\idx=0+1}{5}{ \addtocounter{degp}{72} \addtocounter{degf}{72} % Philosophers \pscircle[fillcolor=black,fillstyle=solid]([nodesep=4,angle=\arabic{degp}]O){.7} \pnode([nodesep=4, angle=\arabic{degp}]O){P\idx} % Forks \psline([nodesep=3.8, angle=\arabic{degf}]O)([nodesep=2.8, angle=\arabic{degf}]O) \pnode([nodesep=3.3, angle=\arabic{degf}]O){F\idx} } % deadlock arrows \psset{nodesep=3pt, arrows=->} \newcounter{next} \newcounter{prev} \setcounter{next}{0} \setcounter{prev}{0} \multido{\idx=0+1}{5}{ \setcounter{prev}{ (\idx + 4) - ((4 + \idx) / 5)*5} % Locked (L) arrow \ncline[linecolor=darkgray]{P\idx}{F\arabic{prev}} \ncput*{L} % Waiting (W) arrow \ncline[linecolor=red]{P\idx}{F\idx} \ncput*{W} } \end{pspicture} \end{document}
The special coordinates mode is used (\SpecialCoor), which allows for defining placement by polar coordinates using a node (O in this case) as a reference. Additionally the calc package allows for counter commands that accept infix notation expressions instead of a simple value. (References:calc, pstricks)