Code: Select all
EnableExplicit
Global m_mutex = CreateMutex()
;Global NewList m()
Procedure Inc(show = 0)
Static NewList m.i()
Static x
Protected r
LockMutex(m_mutex)
If show
ForEach m()
Debug m()
Next
UnlockMutex(m_mutex)
ProcedureReturn
EndIf
x +1
AddElement(m())
m() = x
r = x
UnlockMutex(m_mutex)
ProcedureReturn r
EndProcedure
Procedure Thread1(p)
Protected i
For i = 1 To 100
Inc()
Next
EndProcedure
Define j
For j = 1 To 10
CreateThread(@Thread1(), j)
Next
Delay(2000)
inc(#True)
Heck, even this crashes most of the time, no concurrent access at all:
Code: Select all
EnableExplicit
Procedure Inc()
EndProcedure
Procedure Thread1(p)
Protected i
For i = 1 To 100
Inc()
Next
EndProcedure
Define j
For j = 1 To 10
CreateThread(@Thread1(), j)
Next
Delay(2000)
Without debugger it seems fine, so conclusion is that you need the threadsafe option when you want to use the debug mode.