<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:p="urn:schemas-microsoft-com:office:powerpoint" xmlns:a="urn:schemas-microsoft-com:office:access" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" xmlns:b="urn:schemas-microsoft-com:office:publisher" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" xmlns:odc="urn:schemas-microsoft-com:office:odc" xmlns:oa="urn:schemas-microsoft-com:office:activation" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:q="http://schemas.xmlsoap.org/soap/envelope/" xmlns:rtc="http://microsoft.com/officenet/conferencing" xmlns:D="DAV:" xmlns:Repl="http://schemas.microsoft.com/repl/" xmlns:mt="http://schemas.microsoft.com/sharepoint/soap/meetings/" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ppda="http://www.passport.com/NameSpace.xsd" xmlns:ois="http://schemas.microsoft.com/sharepoint/soap/ois/" xmlns:dir="http://schemas.microsoft.com/sharepoint/soap/directory/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:dsp="http://schemas.microsoft.com/sharepoint/dsp" xmlns:udc="http://schemas.microsoft.com/data/udc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sub="http://schemas.microsoft.com/sharepoint/soap/2002/1/alerts/" xmlns:ec="http://www.w3.org/2001/04/xmlenc#" xmlns:sp="http://schemas.microsoft.com/sharepoint/" xmlns:sps="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:udcs="http://schemas.microsoft.com/data/udc/soap" xmlns:udcxf="http://schemas.microsoft.com/data/udc/xmlfile" xmlns:udcp2p="http://schemas.microsoft.com/data/udc/parttopart" xmlns:wf="http://schemas.microsoft.com/sharepoint/soap/workflow/" xmlns:dsss="http://schemas.microsoft.com/office/2006/digsig-setup" xmlns:dssi="http://schemas.microsoft.com/office/2006/digsig" xmlns:mdssi="http://schemas.openxmlformats.org/package/2006/digital-signature" xmlns:mver="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns:mrels="http://schemas.openxmlformats.org/package/2006/relationships" xmlns:spwp="http://microsoft.com/sharepoint/webpartpages" xmlns:ex12t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:ex12m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:pptsl="http://schemas.microsoft.com/sharepoint/soap/SlideLibrary/" xmlns:spsl="http://microsoft.com/webservices/SharePointPortalServer/PublishedLinksService" xmlns:Z="urn:schemas-microsoft-com:" xmlns:st="" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 12 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:384720956;
        mso-list-type:hybrid;
        mso-list-template-ids:982285054 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal>Mika et al:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I didn’t want to check in a modified version of your program without everyone agreeing my modifications are desired.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Attached is my modified source code.  See if you think the modifications are worthy of adding to the program, or feel free to adjust further, or just tell me you don’t want to add them.  If you want me to check in the modified source, let me know.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Basically, I’ve done 2 things:<br><br><o:p></o:p></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'>       </span></span><![endif]>Added <b>pp.finish()</b> in command line parsing so that if you put extra arguments on command line that aren’t parsed, you will get an error message.  For example, I keep finding I sometimes separate the test names with space instead of comma, only to realize after program starts that the extra arguments were ignored.  (We could also change the specs to allow for comma to be used as a test name separator.)<br><br><o:p></o:p></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='mso-list:Ignore'>2.<span style='font:7.0pt "Times New Roman"'>       </span></span><![endif]>Added “<b>–verbose</b>” command line option.  If you choose this option, extra information is printed, namely:  as threads are created, their “id” is printed and then for each iteration, the number of times each thread executed its main loop is printed.  Also, if a thread doesn’t make any progress on an iteration, a notice that the thread may be starved or deadlocked is printed.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Unless you use –verbose, the program output is the same as your version, except that if you give extra command line arguments, the program will abort and notify you.  For example,<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>C:\cm3\Sandbox\m3-libs\m3core\tests\thread\NT386>threadtest.exe -tests read lock<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>ParseParams: parameter 4 = "lock" extraneous or misplaced.<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'><o:p> </o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>*** Couldnt parse cmd-line args.<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Now, running on Windows 7 (64-bit), I still get non-deterministic behavior and some crashes.  For example:<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>C:\cm3\Sandbox\m3-libs\m3core\tests\thread\NT386>threadtest.exe -verbose -tests read,lock<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>Writing file...done<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>Creating read threads...<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>   read=0<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>   read=1<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>   read=2<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>done<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>Creating lock threads...<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>   lock=21<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>   lock=22<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>   lock=23<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>done<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>running...printing oldest/median age/newest<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>..........laziest thread is 0/0/0 (tests: read 0/0/0 lock 0/0/0)<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>   read Thread 0 completed 1670 loops.<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>   read Thread 1 completed 1692 loops.<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>   read Thread 2 completed 1849 loops.<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>   lock Thread 21 completed 11788253 loops.<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>   lock Thread 22 completed 9448889 loops.<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>   lock Thread 23 completed 9480853 loops.<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>..........laziest thread is 0/0/0 (tests: read 0/0/0 lock 0/0/0)<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>   read Thread 0 completed 2148 loops.<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>   read Thread 1 completed 2113 loops.<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>   read Thread 2 completed 2343 loops.<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>   lock Thread 21 completed 13326765 loops.<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>   lock Thread 22 completed 11327588 loops.<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>   lock Thread 23 completed 12743882 loops.<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>.......<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'><o:p> </o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>***<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>*** runtime error:<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>***    Attempt to reference an illegal memory location.<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'><o:p> </o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>***<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>*** runtime error:<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>***    Attempt to reference an illegal memory location.<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'><o:p> </o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>***<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>*** runtime error:<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>***    Attempt to reference an illegal memory location.<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>***    pc = 0x126e37d = Move + 0x50 in ..\src\runtime\common\RTCollector.m3<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>***<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'><o:p> </o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>***<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>*** runtime error:<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>***    <*ASSERT*> failed.<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>***    file "..\src\thread\WIN32\ThreadWin32.m3", line 841<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>***<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'><o:p> </o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>***<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>*** runtime error:<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>***    <*ASSERT*> failed.<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>***    file "..\src\thread\WIN32\ThreadWin32.m3", line 841<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>***<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'><o:p> </o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>***<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>*** runtime error:<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>***    <*ASSERT*> failed.<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>***    file "..\src\thread\WIN32\ThreadWin32.m3", line 841<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in'><span style='font-family:"Courier New"'>***<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I’ll try on 32-bit XP soon and report.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Regards,<o:p></o:p></p><p class=MsoNormal>Randy Coleburn<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>