<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (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:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style></head><body lang=EN-GB link="#0563C1" vlink="#954F72"><div class=WordSection1><p><o:p> </o:p></p><p>Still got the old mailing list address when I sent this, forwarding to the new one.</p><p>Sorry.</p><p><o:p> </o:p></p><p><o:p> </o:p></p><div style='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p style='border:none;padding:0cm'><br><b>From: </b>Fulvio Esposito<br><b>Sent: </b>05 August 2015 20:47<br><b>To: </b>David Chisnall<br><b>Cc: </b>clang developer list<br><b>Subject: </b>RE: [cfe-dev] [libc++] Porting libc++ to Windows</p></div><p class=MsoNormal><span style='font-family:"Times New Roman",serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-family:"Times New Roman",serif'><o:p> </o:p></span></p><p>Hi David, all.</p><p><o:p> </o:p></p><p>It’s been quite a hectic month and unfortunately I’ve been side-tracked to other matters, but at least I managed to refactor pthread usage in libcxx to support/pthread.</p><p><o:p> </o:p></p><p>My current work is held at <a href="https://github.com/espositofulvio/libcxx/tree/thread_os_abstract_layer">https://github.com/espositofulvio/libcxx/tree/thread_os_abstract_layer</a>. </p><p>I’m planning to start from this branch (which should be up-to-date with the libcxx master branch) to implement the threading stuff for win32.</p><p>I’m really interested in reviews from all of you guys. Here’s a description of what I’ve done.</p><p><o:p> </o:p></p><p>There are two new directories: include/support/pthread and src/support/pthread were the pthread code has been isolated.</p><p><o:p> </o:p></p><p>std::mutex and std::recursive_mutex have been moved to support under the __libcxx_support namespace and then un __mutex_base two using declaration makes them visible in the std::namespace (I’ve found this two good candidates as an abstraction layer as they are)</p><p><o:p> </o:p></p><p>std::thread and std::condition_variable now derive from their counterpart in the __libcxx_support. Part of the implementation can be shared across platforms as they are not dependent on platform specific things.</p><p><o:p> </o:p></p><p>__call_once has been moved to the __libcxx_support namespace as well as it’s implementation is platform dependent (not so call_once).</p><p><o:p> </o:p></p><p>Other classes like std::timed_mutex, std::recursive_times_mutex, std::condition_variable_any, etc. are implemented entirely in terms of the above classes, so they can stay the same.</p><p><o:p> </o:p></p><p>I’ve also done minor modification to algorithm.cpp and memory.cpp that were using pthread directly.</p><p><o:p> </o:p></p><p>I’ve run the test suite successfully on ArchLinux, building in-tree but using clang/llvm from the Arch repos (I’m using a VM as my laptop has Win10) without errors except a few warnings because I don’t have all the required locales installed.</p><p><o:p> </o:p></p><p>I’m downloading Visual Studio 2015 Community Edition and have possibly a bit of time before next Wednesday to start cracking on the windows implementation if anything of the above sounds good.</p><p>Best regards,</p><p>Fulvio</p><p><o:p> </o:p></p><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p><br><b>From: </b>David Chisnall<br><b>Sent: </b>02 July 2015 10:25<br><b>To: </b>Fulvio Esposito<br><b>Cc: </b>Dan Albert;clang developer list<br><b>Subject: </b>Re: [cfe-dev] [libc++] Porting libc++ to Windows</p></div><p class=MsoNormal><span style='font-family:"Times New Roman",serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-family:"Times New Roman",serif'><o:p> </o:p></span></p><p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-size:12.0pt;font-family:"Times New Roman",serif'>On 2 Jul 2015, at 10:19, Fulvio Esposito <fulvio.esposito@live.it> wrote:<br>> <br>> I like your idea and am willing to give it a try. In this case I think it would be more helpful to first define the thin wrapper around pthread and reimplement std:: stuff on top of that, and then to provide the Win32 implementation. How does it sound? <br><br>Yes, that’s what I’d do: first factor out all of the pthread-using stuff into a support/pthread (or similar) file that exposes the pthread functionality via some generic name, and then implement the same with win32 threads.  When you do the second part, don’t be afraid to go back and modify what the abstraction layer looks like if there are some idioms that are hard to support with win32 threads but easy with pthreads (or vice versa).<br><br>You may end up finding that the abstraction layer really looks like the C++ standard library, in which case you may end up just having a using directive in the std namespace for the platform-specific implementation of some classes (mutex comes to mind - thread may have some implementation shared between platforms).<br><br>Please feel free to sign me up as a reviewer,<br><br>David<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>