this is Long, I am sorry,
TL;DR
how can you make code thread safe when it maybe necessary under some 
conditions (which would themselves be not thread safe) to reach into a 
separate process to get or set values.
(I need a means to manage IP sets which is thread safe, OR I need a way 
to Set and Get values across processes which is thread safe.)


First, I know that in some of the versions referenced in the title 
pre-emptive threading is not available. I would like to 'future proof' 
the component as much as possible, I am starting in v13.
I intentionally left out v17, as I believe in v17+ I can use Storage to 
do what I am asking about.

I have a component Setutl, which does a bunch of set related 
manipulations, and management.
I have come across an issue I do not see a resolution for, and am 
looking for some ideas.

As the component deals with sets, it is reasonable to expect to have to 
manage IP sets. In my current version of Setutl (not yet released for 
those using it), I do this by spawning a process during Setutl's init 
which is used only for managing IP sets.  To do the various management 
functions, I currently use SET PROCESS VARIABLE and GET PROCESS 
VARIABLE (I know both are not thread safe). I have been thinking about 
how to replace those commands.

I was going to use the pasteboard to pass information to and from the 
IP set tracking process, but as I discovered yesterday - this could be 
a problem... 
- If the component is accessed from any of the Drag n Drop form events, 
there is a pasteboard 4D uses that is separate from the 'normal' 
pasteboard available everywhere else. This could/would result in issues 
where the passed data is put on the Drag n Drop pasteboard which would 
not be available to the process in which the IP set management occurs, 
and vise verse.

Yes, I know if there is an IP set in use, the host process can not be 
thread safe, BUT, (see below) the code works roughly as follows:

If (setult_Does_Set_Exist($Setname))
  if (setutl_What_Table($Setname)=->[My_Table])
    do stuff

Where Setutl does not care if the set passed ($Setname) is local, 
process, or IP. In Setutl's code a check is done on the set name, 
looking for the left right arrow pairing (<>), and branches as needed 
to manage either 'normal' sets, or IP sets. This, if I understand 
correctly, means that the code to manage the IP sets needs to be thread 
safe for the Setutl functions (above) to be thread safe; and this 
extends to most of Setutl's functionality. 

So, for the Setutl component to be thread safe all of the code in the 
component would need to be thread safe, so I need a means to manage IP 
sets which is thread safe, OR I need a way to Set and Get values across 
processes which is thread safe. 

Thanks for getting this far
Chip


 
---------------
Gas is for washing parts
Alcohol is for drinkin'
Nitromethane is for racing 
**********************************************************************
4D Internet Users Group (4D iNUG)
Archive:  http://lists.4d.com/archives.html
Options: https://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:4d_tech-unsubscr...@lists.4d.com
**********************************************************************

Reply via email to