You've never seen so much food moved so quickly in so many directions as when more than two dozen volunteers met at Bethel Baptist Church last Thursday evening (Dec. 20), to spend two hours sorting donated food and placing it in the Christmas baskets for needy Amissville-area families.
It's a good thing they were so efficient. Jan Makela, food collection coordinator for the enormous community effort, estimates that more than double the quantity of foodstuffs as any previous year were donated to this year's food drive. There were also more volunteers at the church to share in the work.
Two-year-old Roland slumbers while his mother, Amissville resident Rachel Summers, sorts food donated to the Amissville Christmas Basket Project. Photo by Cathie Shiff.
Jan started off the evening by welcoming the workers and announcing that 33 local families would receive food baskets. After introductions, she set the volunteers loose to begin emptying the contents of more than 50 brown bags and boxes of food staged on rows of folding chairs placed back-to-back down the center of the room.
The result was akin to a giant Chinese fire drill, with volunteers of all ages scurrying willy-nilly, carrying food from the chairs to long tables placed along the walls. Even children just learning their letters joined in the effort, with several assisted by two mothers who carried napping toddlers in ingenious carriers on their backs.
This was the food-sorting phase, since the donations had arrived as mixed lots. That meant all the canned peaches had to be put with the fruit cocktail and the Chef Boyardee ravioli went with other cans of prepared pasta. Most of the process was orderly and surprisingly rapid.
However, some volunteers (and you know who you are) gave up trying to find where to place unusual items and instead scuttled them in the growing stacks of boxes and cans. Such irregularities were soon identified by a stern cadre of quality control (QA) agents, who correctly placed the errant items and consolidated categories as needed. They even found a place for a lone can of hearts of palm that had stumped a number of volunteers.
As QA completed the final organization of food, the sorters snacked on hot dogs and peanut butter and jelly sandwiches. At the same time, the methodical box-wrapping team finished covering more than 60 cardboard boxes with Christmas wrapping paper. Soon, the decorated boxes were on the chairs ready to be filled with the bounty.
During this phase, each volunteer chose an individual food item, such as pasta sauce or crackers, and began to place one of these items into each box. This reporter began with the canned pasta and then graduated to jars of pasta sauce. One seven-year-old with long black hair darted around placing a big box of saltines into each basket. When the baskets were filled, more food was placed in doubled grocery bags or a second box.
Yes, there was enough for a second box of food for each needy family. In fact, an estimated 500 pounds of leftover items will go to the Rappahannock Food Pantry.
The brightly colored boxes, heavy with food, were delivered to the families and the food bank Saturday (Dec. 22). I predict sore backs for the delivery teams and holiday joy for receiving families.


Like many geeks I've got a considerable amount of storage at home - currently, that's around 7TB split between various storage systems and it doesn't include space provided by Hard Drives in various bits of hardware I have scattered around the study.
After HP introduced their offer I decided to get one simply to throw 4 x1TB Hard drives I had floating around into it just to provide additional storage and I thought that booting from a 16GB USB stick would be perfect for this job.
It wasn't. I've found that openfiler is a bit cumbersome to get to grips with, the menus don't link from one section to another. So, for example, if you want to create a Windows share it's not obvious where you go - there is nothing for Windows or CIFS on the main menu and once you find it you'll often find that there is a pre-requisitie you need to configure first and thats on a different menu so you have to start again!
None of this would be a major issues except for one thing.
It's slow. Really, really painfully, awfully slow.
I know that the Microserver ships with just 1GB of RAM and that an openfiler system really needs 2GB minimum but menus should not take 5 minutes+ to respond to a click and I notice that other people have been complaining about the same issues.
So, for me Openfiler works, is clunky and slow. I'm going to replace it this weekend with .


Kidult have done it again! A short video against the big corporations of the world. The 14 minutes long clip shows a army of sprayers put up the word Kidult in city's such as Paris, Hong Kong and New York.
Today Tagsandthrows.com released their first short documentary. The camera team followed one of Stockholms most notorious bombers, HNR during a sunny day in city. Live action mixed with HNRs thoughts of bombing, graffiti and life in general. Also make sure to check out the interview with the guys behind Tagsandthows.com over at Stocktown.com.


text:
RUNS IN THE FAMILY
March 27th, 2010 by HFL Staff received Comments Off
People may be familiar with Diggy Simmons as Reverend Run's second-oldest son on the show "Run's House." But Diggy has been steadily building a name for himself as an MC – and somewhat of a young fashionista – thanks in large part to his blog and his mixtape, First Flight. And anyone who was still unfamiliar with Diggy took notice when he released a video of himself freestyling over Nas' "Made You Look" throughout the streets of New York.
So far the video has received nearly 200,000 views and positive reception. Kanye West even posted the video on his blog, saying, "I KNEW THIS KID WAS [GOING] TO BE FRESH. I KNEW IT!" Diggy said he was honored by the compliment from West. Diggy has also just inked a recording deal with Atlantic Records, where he will release his debut album. MTV.com
Diggy and Jojo at Justin Dior Combs' 16th birthday party and with Vanessa Simmons at Charlotte Ronson Fall 2010
Joseph "Run" Simmons, former lead singer of "Run DMC" and brother of Hip Hop Mogul Russell Simmons, poses with his family outside the Trump Int'l Hotel.
Posted under: Fashion
This entry was posted on Saturday, March 27th, 2010 at 1:13 am. You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.
Select Month August 2013 (2) July 2013 (10) June 2013 (3) May 2013 (3) April 2013 (11) March 2013 (6) February 2013 (10) October 2012 (7) September 2012 (31) March 2012 (35) February 2012 (30) January 2012 (64) December 2011 (7) November 2011 (2) October 2011 (11) September 2011 (38) August 2011 (50) July 2011 (47) June 2011 (70) May 2011 (47) April 2011 (16) March 2011 (22) February 2011 (12) January 2011 (30) December 2010 (19) November 2010 (8) October 2010 (8) September 2010 (44) August 2010 (41) July 2010 (36) June 2010 (5) May 2010 (17) April 2010 (32) March 2010 (56) February 2010 (60) January 2010 (35) December 2009 (20) November 2009 (9) October 2009 (62) September 2009 (46) August 2009 (2) July 2009 (4) June 2009 (4) May 2009 (44) April 2009 (26) March 2009 (59) February 2009 (22)
Thoughts … ?
ALEXANDER MCQUEEN AMY WINEHOUSE Angelina Jolie ANNA WINTOUR BEYONCE Blake Lively CARINE ROITFELD Caroline Torem Craig Celebrity Country Designers Entertainment Fashion Fashion Week Hotel Fashionland Jared Leto JAY-Z JEREMY SCOTT Justin Beiber KANYE WEST Kanye West KARL LAGERFELD Kate Hudson KATE MOSS LADY GAGA Lindsay Lohan London Fashion Week MADONNA MARC JACOBS MILAN Models Music NY Night Clubbing OLIVIER ZAHM Olsen Twins PARIS Paris Fashion Week Photographers RICHIE RICH RIHANNA Sports Stars Style Videos Vogue WILLOW SMITH
Fashiontoast
Paper: About Last Night
Stockholm Street Style
© 2021 HotelFashionLand | Optimized by Your SEO Pro

redpajama_set_name: RedPajamaCommonCrawl


text:
ACCEPTED

#### According to
Index Fungorum

#### Published in
null

#### Original name
Phoma pruni Peck

### Remarks
null

redpajama_set_name: RedPajamaGithub


text:
Brazil police end Neymar rape investigation over lack of evidence
A final ruling on the case will be made by a judge.
By AFP Tuesday 30 Jul 2019, 7:43 AM
Jul 30th 2019, 7:43 AM 8,956 Views No Comments
Share1 Tweet Email
Neymar has played for Paris Saint-Germain since 2017.
Image: Liewig Christian/ABACA
POLICE IN BRAZIL investigating rape allegations against footballer Neymar have closed the case due to a lack of evidence, the Sao Paulo attorney general's office has said.
The police decision will be sent to prosecutors today, who will have 15 days to evaluate the case, according to a spokeswoman for the attorney general's office.
Paris Saint-Germain player Neymar has vehemently denied allegations he raped a Brazilian woman in a Paris hotel in May.
A spokesman for Neymar said he was not able to comment on the police decision. Sao Paulo police are due to hold a news conference today.
The affair has dominated headlines and conversations in the football-mad country for weeks and overshadowed Brazil's preparations for the Copa America.
Hosts Brazil went on to win South America's showcase tournament earlier this month without their star player, who was injured in a friendly before the opening match.
The scandal has been ongoing since 2 June when Neymar published a seven-minute video on Instagram, where he had first been in contact with Najila Trindade, revealing that he had been accused of rape.
In an attempt to defend himself against the allegations, Neymar's video was accompanied by WhatsApp messages and images of his encounter with Trindade – without her consent, possibly breaking Brazilian law.
In the following weeks, Neymar was questioned by police over the WhatsApp messages.
He also appeared before police in Sao Paulo, where Trindade had filed her complaint at the end of May.
As the case dragged on, police filed a defamation suit against Trindade – who was dropped by multiple lawyers – after she insinuated the force was corrupt.
Controversy has continually followed the Paris Saint-Germain player, who flew back to France earlier this month.
Neymar, who joined PSG in 2017, has made clear he wants to return to Barcelona.
He has yet to feature during PSG's pre-season tour in Asia and French media reported he will miss today's game against Sydney in China.
© AFP 2019.
<iframe width="600" height="460" frameborder="0" style="border:0px;" src="https://www.thejournal.ie/https://www.thejournal.ie/brazil-police-end-neymar-rape-investigation-over-lack-of-evidence-4745307-Jul2019/?embedpost=4745307&width=600&height=460" ></iframe>
Email "Brazil police end Neymar rape investigation over lack of evidence".
Feedback on "Brazil police end Neymar rape investigation over lack of evidence".
Brazil police end Neymar rape investigation over lack of evidence Comments


Wordpress automatic plug-in is definitely the greatest wordpress tool with regard to automating your web page. This particular extension will certainly get hold of articles from a number of sources as well as post it instantly to your web site. That is the ideal autoblog wordpress extension built for wordpress. WordPress automatic includes a huge amount of solutions to customize each blog posting. Content may be posted at any sort of frequency. For those who are attempted of writting content material that is the ideal wordpress tool for you personally.
Nulled Camilla v2.2.2 – Horizontal Fullscreen Photography Theme!


text:
M. M. Rojas-Badía
Universidad de La Habana Facultad de Biología
Jefa del Grupo de Investigación de Ecología Microbiana
Dpto. de Microbiología y Virología
Y. Ríos Rocafull
M. I. Sánchez-López
B. L. Dibut Álvarez
M. Ortega-García
G. Tejeda González
Inicio > Vol. 6 (2019) >	Rojas-Badía
The culture medium effect in plant growth promotion activity of Gluconacetobacter diazotrophicus in carrot and sugar beet
Y. Ríos Rocafull1; M.I. Sánchez López2; B. L. Dibut Álvarez1; M. Ortega García1; G. Tejeda González1; J. Rodríguez Sánchez1; M. M. Rojas Badía2*
1. Instituto de Investigaciones Fundamentales en Agricultura Tropical "Alejandro de Humboldt", Cuba., nstituto de Investigaciones Fundamentales en Agricultura Tropical "Alejandro de Humboldt", Cuba , 2. Facultad de Biología, Universidad de La Habana. Calle 25 #455 e/ J e I Vedado, La Habana. Cuba., Universidad de La Habana, Facultad de Biología, Universidad de La Habana,
<city>La Habana</city>
, Cuba
Correspondence: *. Corresponding Author: Marcia María Rojas Badía. Facultad de Biología, Universidad de La Habana. Calle 25 #455 e/ J e I Vedado, La Habana. Cuba. Phone: (53) 7832 9241. E-mail: E-mail:
For Gluconacetobacter diazotrophicus cultivation have been used different media, but a few researches shows the changes in the plant growth promoting traits of this microorganism. The aim of this work was to evaluate in vitro and in vivo conditions the effect of five culture media in plant growth promotion activity of this bacterium in carrot and sugar beet. The bacterium concentration after 48 hours of fermentation in a shaker was 1012 CFU.mL-1 in all media. After the fermentation process, the bacterium has stable growth in culture medium without combine nitrogen; but it has difference in the solubilization halo in NBRIP medium, indicating the affectation of phosphorous solubilisation ability. The effect of final fermentation products application over carrot and sugar beet also depend of the medium used for microorganism growth. Media like SG and SYP where better for the action over lives and MA medium (rice) was better in the action over root in both vegetables species. The results show the influence of culture medium in plant growth promotion activities of G. diazotrophicus in carrot and sugar beet.
Received: 2018 March 21; Accepted: 2019 June 27
revbio. 2020 Mar 20; 6: e470
doi: 10.15741/revbio.06.e470
Keywords: Key words: Gluconacetobacter diazotrophicus, bioproduct, metabolism.
Gluconacetobacter diazotrophicus is an endophytic bacterium belonging to the phylum Proteobacteria, section Alpha, order Rhodospirillales and family Acetobactereceae. It has great attractions for the preparation of biofertilizers due to its ability to fix atmospheric nitrogen, produce indoleacetic acid (IAA), solubilize mineral nutrients and exhibit antagonistic activity against phytopathogenic fungi ( Reis et al., 2015 ). Also, the positive results obtained by the inoculation on graminaceous plants ( Kumarasamy & Santhaguru, 2011 ; Indi et al., 2014 ; Patil et al., 2011 , Hernández-Escareño et al., 2015 ) and tropical foods ( Dibut et al., 2011 ) were interesting in this way.
Different culture media used for the growth of this bacterial species are described. The liquid medium LGIM was used by Molinari & Bioardi (2013) to evaluate the production of biomass and levana. On the other hand, Dibut et al. (2011) obtained a biopreparate for agricultural use in the SG medium. The liquid DYGS medium was used to determine the influence of gluconic acid on the antagonistic activity of the microorganism ( Nieto-Peñalver et al., 2014 ), as well as to investigate aspects related to the endophytic colonization process ( Alquéres et al., 2013 ). Although the culture medium used for the bacterial growth, can exert effects on its metabolism, no research was found in the consulted literature where the effect as plant growth promoting bacteria for this species is demonstrated. This aspect has great importance for the biotechnological application of G. diazotrophicus. It is also decisive for the use of this microorganism in the bioproducts obtainment for stimulate the plant growth in species of economic interest, since the effectiveness of these will depend on the composition of the medium.
The objective of this work was to determine the influence of the culture media used for the growth of G. diazotrophicus in its potential as a bacterium that promotes plant growth in vitro and in vivo.
The research was conducted during 2012-2014 period
Bacterial strain and culture media
The INIFAT Gd-42 strain of Gluconacetobacter diazotrophicus conserved in the Collection of Beneficial Bacteria of the Fundamental Research Institute for Tropical Agriculture Alejandro de Humboldt (INIFAT) ( Ríos et al., 2016b ) was used. The microorganism was grown under fermentation conditions in an orbital shaker at 150 rpm, at 28 ± 2 °C of temperature. In the study, five culture media previously used in the study of this bacterium were used: LGI ( Cavalcante & Döbereiner, 1998 ); SG ( Döbereiner et al., 1993 ); SYP ( Caballero-Mellado & Martínez-Romero, 1994 ); a modification of the DYGS medium ( Siqueira et al., 2009 ) and the MA medium ( Ortega, 2012 ) (Table 1). All were prepared in 500 mL Erlenmeyer flasks containing 250 mL of effective volume, which were inoculated with the pure strain. The growth of the microorganism was evaluated by counting colonies on solid medium and calculating the colony forming units (CFU mL-1) ( Madigan et al., 2014 ). The samples were taken every two hours during the first 12 hours. Since that time, the samples were taken every four hours until the end of the 48 hours of fermentation.
Media composition used in the study (each liter).
DYGS
Sucrose 50 g Glycerol 10 mL Sucrose 10 g Sucrose 10 g Sucrose 50 g
Sugar 50 g
Triptone 5.0 Bacteriological Peptone 2g
Glutamic acid 1.5 Rice cooked extract 50 g
Yeast extract 0.03 Yeast extract 1 Yeast extract 3 g Yeast extract 3 g Yeast extract 5 g
K2HPO4 0.1 K2HPO4 0,1 K2HPO4 1g MgSO4 1.5 g
KH2PO4 0.3 KH2PO4 0,3 KH2PO4 EG MgSO4 1.5 g
CaCl22H2O 0.01 MgSO4 7H20 KH2PO4 3g K2HPO4 1.0 g
MgSO47H2O 0.1 0.1 KH2PO4 3g
Na2MoO4 2H2O CaCl2 2H|2O
0.001 0,001
FeCl3 6H2O 0.005 Na2MoO4 2H2O
FeCl3 6H2O
pH 5.5 pH 6.0 pH 6.0 pH 6.0
Cavalcante & Döbereiner, 1998 Döbereiner et al., 1993 Caballero-Mellado & Martínez-Romero, 1994 Siqueira et al., 2009 Ortega, 2012
In vitro evaluation of nitrogen fixing and phos-phorus solubilization activity
Once the bacteria had grown in the five culture media, their capacity to fix atmospheric nitrogen and to solubilize phosphorus was evaluated under in vitro conditions. For the first case, a qualitative criteria was used ( Pérez et al., 2014 ), based on the growth of the microorganism during five successive inoculations performed by puncture in the semisolid LGI medium without combined nitrogen ( Cavalcante & Döbereiner, 1998 ). The solubilization of phosphorus was evaluated from the subtraction between the halo of solubilization and the grouth halo of the colony formed in the NBRIP medium ( Nautiyal, 1999 ) at 72 hours of incubation. In both determinations the bacteria was maintained at temperature of 28 ± 2 °C and three repetitions of each one were made.
Evaluation of the plant growth promotion activity
To know the effect of the culture medium on the stimulation effect of G. diazotrophicus in vivo conditions, a greenhouse experiment was carried out. 2 kg capacity pots were used, which were filled with Ferralitic Red soil ( Hernández et al., 2015 ) without sterilization, characterized by having 2.85 % organic matter, pH 7.3, 2.09 ppm assimilable phosphorus and Ca2+, Mg2+, Na+ and K+ content of 19.1; 4.2; 0.11 and 0.38 c.mol.kg soil-1.
Unsterilized seeds of carrot (Daucus carota L.) cultivar New Kuroda and sugar beet (Beta vulgaris L.) cultivar Detroit Red were used. For the production of the bioproducts, G. diazotrophicus was cultivated in five culture media separately under submerged fermentation conditions in shaker orbital at 150 rpm and 28 ± 2 °C of temperature. Each culture was suspended in common water at 10 %, obtaining a final bacterial density of 108 CFU.mL-1. The final solution was applied by spraying the soil (10 mL per pot), after germination of the seed for both crops. The germination is considering as the emergence of the plant above the soil surface, which corresponded to a period of 15 days after sowing. At 75 days for sugar beet and 85 for carrot, several growth indicators were evaluated. The indicators were: length (cm) and diameter (cm) of the root, the widest part of the root (1 cm from the apex), the number of leaves, the height of the plants (cm), the fresh weight of the plant (g). For the first two indicators an instrument of 0.01 mm error was used, while in the height measurement of the plant a graduated rule was used and it was measured from the apex of the root to the beginning of the leaves for both plant species. The fresh weight was quantified with a semi-analytical balance (0.01 g of error). Twenty plants were used per treatment (culture medium). A control was added with the same number of plants, where only common water was applied.
The obtained results in each experiment were averaged with the Microsoft Office Excel program on Windows, which was also used to prepare the graphs and to calculate the standard deviation of the mean. The statistical processing was carried out using the STATGRAPHICS version 5.0 program, which also verified the normality and homogeneity of the variances of the treatments, according to Kolmogorov-Smirnov, Cochran, Hartley and Bartlett tests. A completely randomized design was used. An Analysis of Variance (ANOVA) was performed with a Duncan test at 5 % significance.
The establishment of several stages in the five culture media used is highlighted when analyzing the growth curves of the INIFAT Gd-42 strain of G. diazotrophicus (Figure 1). This behavior corresponds to a diauxic growth. The first is framed between 0 and 10 h, the second between 10 and 16 h, the third, between 16 and 24 h, the fourth between 24 and 36 hours and the last from 36 to 48 h. The last stage corresponds to the stationary phase of growth. In the previous ones, the typical characteristics of a diauxic growth can be observed, where there are two lag phases followed by their corresponding exponential phase. The concentration values of the microorganism are in the order of 1012 CFU.mL-1, and did not show significant statistical differences among the studied media when completing the 48 hours of the fermentation process.
[Figure ID: f1] Figure 1.
Behavior of the concentration of G. diazotrophicus strain INIFAT Gd-42 growing in five culture media. Hour 48: Esx: 0.386189; CV (%): 5.08.
Although the bacterial concentration remained stable, during the study their characteristics were checked, both in vitro conditions and the effect that the application of the final fermentation product on carrots and beets in vivo, related with the culture medium used for the growth of the strain. The microorganism kept the growth during five successive inoculations in semi-solid culture medium without combined nitrogen. This result suggests that the bacterium maintained its capacity to fix atmospheric nitrogen. On the other hand, the solubilization halo produced in the NBRIP solid medium was greater when the microorganism grew previously in the SYP and MA media (Table 2), which indicates that the medium used for the growth of the microorganism affects its ability to solubilize phosphorus.
Phosphorous solubilization in NBRIP medium by G. diazotrophicus strain INIFAT Gd-42 grew in different culture media.
Solubilization halo (cm)
LGI 0.10 b
SYP 0.16 a
DYGS 0.09 b
SG 0.11 b
MA 0.16 a
Esx 0.0059
CV (%) 32.49
TFN1Note: Different letters indicate statistically differences according ANOVA and Duncan's test (5 %).
Differences were observed in the stimulation of the growth of the two horticultural crops studied under in vivo conditions, depending on the culture medium where the microorganism grew during the fermentation process. In the case of carrots, there are differences in the variables measured with the different treatments (Table 3). The strain of G. diazotrophicus grown in the SG medium exerted a greater effect on the variables measured in the aerial part of the plants, such as height and fresh weight of the leaves, while there is no difference in this treatment with the non-inoculated control in the variable number of leaves. When the bacteria grew in MA medium, a positive effect was observed with respect to the control and superior to the rest of the treatments in the root zone, where the root diameter and length were measured, as well as its fresh weight.
Effect of G. diazotrophicus INIFAT Gd-42 grown in different culture media in carrot crop (Daucus carota L.).
Number of leaves
Leaves fresh weight (g)
Root diameter (cm)
Root length (cm)
Root Fresh weight (g)
SG 36 a 8.29 a 5.73 a 2.925 b 5.75 b 0.45 b
LGI 25.94 cd 6.88 bcd 3.85 bc 1.2 c 6.7 b 0.156 c
SYP 29.81 bc 6.43 cd 2.58cd 3.1 b 6.375 b 0.30 bc
DYGS 22.85 d 6.13 d 1.69 d 2.475 b 6.375 b 0.17 c
MA 31.31 b 7.56 ab 4.7 ab 5.56 a 7.9 a 0.92 a
non-inoculated 30.0 b 7.29 abc 4.04 b 1.475 c 6.175 b 0.244 c
Esx 1.3852 0.3557 0.4715 0.3012 0.3655 0.0543
CV (%) 18.83 16.52 48.92 55.79 14.72 74.32
For beet, a greater effect is shown in comparison with the non-inoculated control (Table 4). In the aerial part of the plant, greater height was obtained with the bacteria grewn in the SG medium and a greater number of leaves when inoculated with the product of the fermentation in SYP medium. The effect on the root was more evident, significant differences are shown for all media with respect to the variant not inoculated with the microorganism. In the root length the products obtained in MA, SYP, SYGS and LGI media are superior to the control and in the diameter of this the best results were obtained with the bacterium grown in MA, SYP, SYGS and SG media, although there are also differences in the effect on LGI with the witness. In the case of the variable fresh weight of the plant, the effect of the bacterium grown in MA medium is highlighted over the rest of the treatments, included in the non-inoculated control.
Effect of G. diazotrophicus INIFAT Gd-42 grown in different culture media in sugar beet crop (Beta vulgaris L.).
of leaves
Root diameter
Root length
Root Fresh
SG 20.33 a 3.33 b 3.40 a 2.63 bc 3.88 abc
LGI 17.8 bc 3.67 b 2.80 b 2.83 b 4.1 abc
SYP 16.67 c 4.8 a 3.50 a 3.0 ab 4.38 ab
DYGS 17.83 bc 3.83 ab 4.20 a 2.98 ab 3.84 bc
MA 19.00 ab 4.33 ab 4.20 a 3.32 a 4.73 a
Testigo 17.25 bc 3.50 b 2.30 c 2.32 c 3.27 c
Esx 0.7323 0.3694 0.3574 0.1488 0.2436
CV (%) 11.02 24.79 28.83 16.22 16.05
Different culture media have been used for the growth of G. diazotrophicus ( Eskin et al., 2014 ). For example, the DYGS medium ( Siqueira et al., 2009 ) was used in fermentation trials to evaluate the effect of osmoprotective substances on this bacterial species; while the SYP medium has been used to determine the effect of different concentrations of phytohormones on the microorganism ( Rojas et al., 2015 ). For the growth of the bacterium in order to evaluate the effect of its application on plant species such as tropical meats ( Dibut et al., 2011 ) and grasses ( Muthukumarasami et al., 2006 ), media such as the LGI and SG have been used, respectively.
However, in the consulted literature no papers were found where the action exerted by the culture medium on the potential as a bacterium that promotes the plant growth of G. diazotrophicus, including the effect of the final product of the fermentation of the microorganism on the stimulation produced by the application on vegetables, is evaluated. There is also no consensus on which means to use to obtain a bioproduct for agricultural use, but the use of media based on natural products are more attractive considering the economic and environmental aspects. For this reason, the potential as a plant growth promoting bacterium of the INIFAT Gd-42 strain of G. diazotrophicus was evaluated under in vitro and in vivo conditions, after growing in five culture media.
The growth curve obtained in all cases is similar to that described by Molinari & Bioardi (2013) . According to these authors there are few studies about the growth of G. diazotrophicus in the presence of sucrose as a carbon source. The establishment of a diauxic growth is probably associated with the presence of sucrose as a carbon source and the impossibility of the microorganism to transform this sugar directly, as well as the gradual consumption of the different substrates that are originated by the activity of the enzyme levansucrose ( Hernández et al., 1995 ; Molinari & Bioardi, 2013 ). In all used media, diauxic growth was obtained, and the two phases of adaptation or lag, and of exponential growth, typical of using more than one carbon and energy source in the medium, can be appreciated. The bacterium will first use the source of energy that allows it to grow better, and later when it is exhausted, others present in the environment ( Madigan et al., 2014 ). In all media there is more than one compound that can have this function as can be seen in Table 1. However, regarding the values of final concentration of the bacterium reached, these were similar to each other and to those referred to in the works from Dibut et al. (2011) and Luna et al. (2010) .
The fact that a formulation made from a natural product such as rice, supports the growth of the bacteria. It is an encouraging result from the technological point of view, because for the scaling of a bioproduct requires little complex means where they are incorporated natural sources. Therefore, this could be a variant to exploit in the search for a biofertilizer that has this bacterial species as an active principle. The rice medium (MA) can provide the microorganism with B vitamins, minerals, proteins, amino acids and other nutrients that are present in the rice grain (Pinciroli, 2010). These compounds can contribute to the growth of the bacteria, obtaining a medium rich in nutrients from cooking the rice and mixing with the other components of the medium.
The ability to fix nitrogen was described for G. diazotrophicus from its isolation (Cavalcante & Döbereiner, 1998). There are references where the possibility of growth of microorganisms in semi-solid media without combined nitrogen with the process of biological nitrogen fixation is associated ( Pérez et al., 2014 , de la Fé et al., 2015 ). This criteria was used in the study for determine the maintenance of this characteristic in the bacteria. However, it would be interesting to show in later research that the amount of atmospheric nitrogen that can transform the microorganism is not affected either. On the other hand, the differences in phosphorus solubilization haloes are in corresponding with previous observation of Crespo et al. (2011) . They described the influence of the carbon source on the solubilization potential of G. diazotrophicus and they showed that the increase in phosphorus soluble is proportional to gluconic acid production. This semiquantitative method allows having a reference of the maintenance of the capacity for phosphates solubilization by the bacteria.
The stimulation of growth indicators by the inoculation of promotig bacteria may be associated, in addition to the contribution of nutrients made by the biological fixation of nitrogen and the solubilization of phosphorus, to other factors such as the release of phytohormones ( Pazos et al., 2016 ) and colonization of the rhizospheric and endophytic environment ( Jha et al., 2013 ). For G. diazotrophicus, the ability to release hormones, mainly indoleacetic acid, is described, which can also be affected by the culture medium used for the growth of the bacteria ( Patil et al., 2011 ). It can be producing the particular stimulation of speciphic organ of the plant. Other authors describe the influence of the carbon source in the production of exopolysaccharides, compounds of great importance for the biofilms formation, stress tolerance and the establishment of the bacteria inside of crops (Meneses et al., 2011).
The ability of G. diazotrophicus to increase the growth of natural or occasional host crops has been demonstrated primarily for grasses ( Nautiyal, 1999 ), food and fruit ( Dibut et al., 2011 ). For vegetables, Hazza et al. (2014) and Kumar et al. (2013) , demonstrated G. diazotrophicus colonization in carrots, and the increase of sugar beet yields due to the application of the microorganism. In Cuba, Ríos et al. (2016a) obtained encouraging results in the bacteria interaction with carrot and sugar beet. However, in the present work it is shown that the effect on growth stimulation in these crops will depend on the culture medium used for the growth of the bacteria, so attention must be paid to their composition to obtain the best agronomic results. This effect is demonstrated mainly at the root level, an organ of vital agronomic importance in these crops. For this reason in this case it is sufficient for the analysis of the stimulation of the growth of the plant the measurements of fresh weight, since just the root is what is used for human consumption.
In general, it is demonstrated that the culture medium influences in the potential plant growth promotion by G. diazotrophicus. That is why, it is an important aspect to take into account in the biotechnological production of agricultural products for the benefit of economical important plant species.
The culture medium used for the growth of G. diazotrophicus influences in its plant growth stimulating potential. The use of culture medium composed mainly of rice, sucrose and commercial sugar, produces greater benefits in the growth stimulation of carrot and sugar beet compared with other alternatives such as SG, SYP, DYGS and LGI.
fn1Cite this paper: Ríos Rocafull, Y., Sánchez López, M.I., Dibut Álvarez, B. L., Ortega García, M., Tejeda González, G., Rodríguez Sánchez, J., Rojas Badía, M. M. (2019). The culture medium effect in plant growth promotion activity of Gluconacetobacter diazotrophicus in carrot and sugar beet. Revista Bio Ciencias 6, e470. doi: https://doi.org/10.15741/revbio.06.e470


Not long after young Dutch photographers Anouk Kruithof and Jaap Scheeren graduated from art college they were featured in a newspaper series on the future of art-school graduates which was titled The Black Hole. For Kruithof and Scheeren, who were determined to make a name for themselves as photographers, that title became a theme for an ambitious project: a series of associative photographs on depression, black-outs, the universe and actual black holes.
The result is this multi-dimensional publication, in which pictures relate to each other in ever-changing variations, filling the black hole no matter how you define it in new and surprising ways. This fresh, innovative publication was the first winner of the Unique Photography Prize awarded by HUP Gallery Amsterdam.


This is a straight up repost from William Azaroff's blog. I'm doing my part to help mobilize the credit union world to vote, vote, vote for one of our own. Any credit union CEO with the courage and sense of humour to allow a co-worker to ham it up with a tongue-in-cheek impersonation like this is my kind of CEO and definitely gets my vote!
Help William spread the word among your staff and let's help a fellow credit union get a Webby over Facebook. Voting ends May 1, so let's get voting!
Vancity is Canada's largest credit union and is an early pioneer in the use of social media to connect with the communities it serves.


text:
EAP (Employee Assistance Program)
Men Matter
Music Therapy >
Adapted Piano
Triple P Parenting Program
Youth Therapy
WAYS TO DONATE
"Donations are Gratefully Appreciated"
"THANK YOU FOR YOUR SUPPORT"
WAYS TO DONATE
.... A FRIEND TO LEAN ON… SINCE 1931
The Catholic Family Services Bureau of Prince Edward Island was established in 1931 as the first Social Service Agency in the province. Today, despite the idyllic nature of this Island, PEI families and individuals still often find themselves threatened by society's pressures. For more than three quarters of a century, we have been there, a friend to lean on when those pressures become intolerable.
The mission of the Bureau is to strengthen and promote the quality of family life on PEI. This is carried out through professional counseling services for individuals, couples and families, and through family education programs and advocacy services. Fees for these services are charged on an "ability to pay" basis.
The Bureau has always been committed to providing services to those who are in need and in particular to those who would not otherwise be able to access them. As a result, fee recoveries don't come close to covering the costs of our professional services. In fact, fees cover only 33% of the costs. To support these services to our community, the Bureau relies on significant external funding. Since traditional funding sources have declined by over 50% in recent years, we must rely increasingly on the generosity of concerned Islanders.
DONATE
You can donate by following this link to:
Canada Helps or
"Donations are Gratefully Appreciated"
"THANK YOU
FOR YOUR SUPPORT"
HOW WE USE THE FUNDS
Funds support the delivery of counselling and family education services that benefit:
People facing short term crises that threaten or even destroy families
Individuals and families in crisis who lack a reliable support network to "lean on"
People of all beliefs and orientations: Bureau services are non-denominational
The Island community as a whole, since families in crisis affect those around them
Those facing turmoil, who by working through their issues, can become, or continue to be, functional and contributing members of society
For more information, contact us
P.O. Box 698, 129 Pownal Street, Charlottetown, PE C1A 7L3
email: admin@catholicfamilyservicesbureau.com
- SITE MAP-
www.catholicfamilyservicesbureau.com
©2014 Catholic Family Services Bureau • All Rights Reserved
Website built and hosted by PEI Business Federation Ltd.


text:
\section{Introduction}
\emph{Mutual exclusion}, introduced by Dijkstra \cite{Dijkstra:MEProblem}, is a fundamental and well studied problem.
A mutual exclusion object (or lock) allows processes
to synchronize access to a shared resource.
Each process obtains a lock through a \emph{capture protocol}
but at any time, at most one process can own the lock.
A process is said to own a lock if it participates in a ``capture'' protocol designed for the object, and completes it.
The owner of the lock can access the shared resource, while all other processes wait in their capture protocol for the owner to ``release'' the lock.
The owner of a lock can execute a release protocol which frees up the lock.
The capture protocol and release protocol are often denoted \emph{entry} and \emph{exit section}, and a process that owns the lock is in the \emph{critical section}.

In this paper, we consider the standard \emph{cache-coherent} (CC) shared model with $N$ processes that supports atomic read, write, and compare-and-swap (short: \CAS) operations.
In this model, all shared registers are stored in globally accessible shared memory.
In addition, each process has a local cache and a cache protocol ensures coherency.
A \emph{Remote Memory Reference} (short: RMR) is a shared memory access of a register that cannot be resolved locally (i.e., a cache miss).
Mutual exclusion algorithms require processes to busy-wait, so the traditional step complexity measure, which counts the number of shared memory accesses, is not useful.

Early mutual exclusion locks were designed for uniprocessor systems that supported multitasking and time-sharing.
A comprehensive survey of these locking algorithms is presented in \cite{Raynal:Survey}.
One of the biggest shortcomings of these early locking algorithms is that they did not take into account an important hardware technology trend -- the steadily growing gap between high processor speeds and the low speed/bandwidth of the processor-memory interconnect \cite{Culler:GapInProcessorAndInterconnectSpeeds}.
A memory access that traverses the processor-to-memory interconnect, called a \emph{remote memory reference}, takes much more time than a local memory access.

Recent research \cite{Anderson:SpinLockPerformance,Mellor-Crummey:QueueLock,AK:MEConjecture,AYK:Adaptive,AYK:ImprovedLowerBound,Attiya:MELowerBound,DanekGolab:FCFS,Jayanti:Abortable,KA:AdaptiveLowerBound} on mutual exclusion algorithms therefore focusses on minimizing the number of remote memory references (RMR).
The maximum number of RMRs that any process requires (in any execution) to capture and release a lock is called the RMR complexity of the mutual exclusion algorithm.
RMR complexity is the metric used to analyze the efficiency of mutual exclusion algorithms, as opposed to the traditional metric of counting steps taken by a process (step complexity).
Step complexity is problematic, since for mutual exclusion algorithms, a process may perform an unbounded number of memory accesses (each considered a step) while busy-waiting for another process to release the lock \cite{Taubenfeld:FastMutualExclusion}.

Algorithms that perform all busy-waiting by repeatedly reading \emph{locally accessible} shared variables, achieve bounded RMR complexity and have practical performance benefits \cite{Anderson:SpinLockPerformance}.
Such algorithms are termed  \emph{local spin} algorithms.
A comprehensive survey of these algorithms is presented in \cite{Anderson:Survey}.
Yang and Anderson presented the first $\Order{\log N}$ RMRs mutual exclusion algorithm \cite{YA:YALock} using only reads and writes.
Anderson and Kim \cite{AK:MEConjecture} conjectured that this was optimal, and the conjecture was proved by Attiya, Hendler, and Woelfel \cite{Attiya:MELowerBound}.

Local spin mutual exclusion locks do not meet a critical demand of many systems \cite{Scott:non-blocking}.
Specifically, the locks employed in database systems and in real time systems must support a ``timeout'' capability which allows
a process that waits ``too long'' to abort its attempt to acquire the lock.
The ability of a thread to abort its lock attempt is crucial in data base systems; for instance in Oracle's Parallel Server and IBM's DB2, this ability serves the dual purpose of recovering from transaction deadlock and tolerating preemption of the thread that holds the lock \cite{Scott:non-blocking}.
In real time systems, the abort capability can be used to avoid overshooting a deadline.
Locks that allow a process to abort its attempt to acquire the lock are called abortable locks.
Jayanti presented an efficient deterministic abortable lock \cite{Jayanti:Abortable} with worst-case \Order{\log N} RMR complexity, which is optimal for deterministic algorithms.

In this paper we present the first randomized abortable mutual exclusion algorithm that achieves a sub-logarithmic RMR complexity.
Due to the inherent asynchrony in the system, the RMRs incurred by a process  during a lock capture and release depend on how the steps of all the processes in the system were scheduled one after the other.
Therefore, the maximum RMRs incurred by any process during any lock attempt are  determined by the ``worst'' schedule that makes some process incur a large number of RMRs.
To analyze the RMR complexity of lock algorithms, an adversarial scheduler called the \emph{adversary} is defined.
The lower bound of $\Omega(\log N)$ in \cite{Attiya:MELowerBound} for mutual exclusion algorithms that use only reads and writes holds for deterministic algorithms where the adversary knows all processes' future steps.
The lower bound does not hold for randomized algorithms where processes flip coins to determine their next steps.
Randomized algorithms limit the power of an adversary since the adversary cannot know the result of future coin flips.
Adversaries of varying powers have been defined.
The most common ones are the \emph{oblivious}, the \emph{weak}, and the \emph{adaptive} adversary \cite{Aspnes:AdversaryModels}.
An \emph{oblivious} adversary makes all scheduling decisions in advance, before any process flips a coin.
This model corresponds to a system, where the coin flips made by processes have no influence on the scheduling.
A more realistic model is the \emph{weak} adversary, who sees the coin flip of a process not before that process has taken a step following that coin flip.
The \emph{adaptive} adversary models the strongest adversary with reasonable powers, and it can see every coin flip as it appears, and can use that knowledge for any future scheduling decisions.
Hendler and Woelfel \cite{Philipp:RLock} and later Giakkoupis and Woelfel \cite{PhilippGeorge:LowerBoundRLockAdaptiveAdv} established a tight bound of $\Theta(\log N / \log \log N)$ expected RMR complexity for randomized mutual exclusion against the adaptive adversary.
Recently Bender and Gilbert \cite{BenderGilbert:ME} presented a randomized lock that has amortized $\Order{\log^2 \log N}$ expected RMR complexity against the oblivious adversary.
Unfortunately, this algorithm is not strictly deadlock-free (processes may deadlock with small probability, so deadlock has to be expected in a long execution).
Our randomized abortable mutual exclusion algorithm is deadlock-free, works against the weak adversary and achieves the same epected RMR complexity as the algorithm by Hendler and Woelfel, namely $\Order{\log N / \log \log N}$ expected RMR complexity against the weak adversary.

The randomized algorithm we present uses \CAS\ objects and read-write registers.
Golab, Hadzilacos, Hendler, and Woelfel \cite{Golab:CASImplementation} (see also \cite{Golab:Thesis}) presented an \Order{1}-RMRs implementation of a \CAS\ object using only read-write registers.
Moreover, they proved that one can simulate any deterministic shared memory algorithm that uses reads, writes, and conditional operations (such as \CAS operations), with a deterministic algorithm that uses only reads and writes, with only a constant increase in the RMR complexity.
Recently in \cite{Philipp:LinearizabilityNeqAtomicity}, Golab, Higham and Woelfel  demonstrated that using linearizable implemented objects in place of atomic objects in randomized algorithms allows the adversary to change the probability distribution of results.
Therefore, in order to safely use implemented objects in place of atomic ones in randomized algorithms, it is not enough to simply show that the implemented objects are linearizable.
Also in \cite{Philipp:LinearizabilityNeqAtomicity}, it is proved that there exists no general correctness condition for the weak adversary, and that the weak adversary can gain additional power depending on the linearizable  implementation of the object.
Therefore, in this paper we assume that \CAS operations are atomic.

\bparagraph{Abortable Mutual Exclusion}\label{sec:Problem}
We formalize the notion of an abortable lock by specifying two methods, \lock{} and \release{}{}, that processes can use to capture and release the lock, respectively.
The model assumes that a process may receive a signal to abort at any time during its \lock{} call.
If that happens, and only then, the process may fail to capture the lock, in which case method \lock{} returns value $\bot$.
Otherwise the process captures the lock, and method \lock{} returns a non-$\bot$ value, and the \lock{} call is deemed \emph{successful}.
Note that a \lock{} call may succeed even if the process receives a signal to abort during a \lock{} call.

Code executed by a process after a successful \lock{} method call and before a subsequent \release{}{} invocation is defined to be its Critical Section.
If a process executes a successful \lock{} call, then the process's \emph{passage} is defined to be the \lock{} call, and the subsequent Critical Section and \release{}{} call, in that order.
If a process executes an unsuccessful \lock{} call, then it does not execute the Critical Section or a \release{}{} call, and the process's passage is just the \lock{} call.
Code executed by a process outside of any passage is defined to be its Remainder Section.

The \emph{abort-way} is defined to be the steps taken by a process during a passage that begins when the process receives a signal to abort and ends when the process returns to its Remainder Section.
Since it makes little sense to have an abort capability where processes have to wait for other processes, the abort-way is required to be bounded wait-free (i.e., processes execute the abort-way in a bounded number of their own steps).
This property is known as \emph{bounded abort}.
Other properties are defined as follows.
\emph{Mutual Exclusion}: At any time there is at most one process in the Critical Section;
\emph{Deadlock Freedom}: If all processes in the system take enough steps, then at least one of them will return from its \lock{} call;
\emph{Starvation Freedom}: If all processes in the system take enough steps, then every process will return from its \lock{} call.
The abortable mutual exclusion problem is to implement an object that provides methods \lock{} and \release{}{} such that it that satisfies mutual exclusion, deadlock freedom, and bounded abort.

\subsection{Model}\label{sec:Model}
Our model of computation, the asynchronous shared-memory model \cite{Herlihy:Linearizability} with
$N$ processes which communicate by executing \emph{operations} on
\emph{shared objects}.
Every process executes its program by taking \emph{steps}, and does not fail.
A step is defined to be the execution of all local computations followed by an operation on a shared object.
We consider a system that supports atomic read-write registers and \CAS{} objects.

A read-write register $R$ stores a value from some set and supports two atomic operations $R$.\Read{} and $R$.\Write{}.
Operation $R$.\Read{} returns the value of the register and leaves its content unchanged, and operation $R$.\Write{v} writes the value $v$ into the register and returns nothing.
A \CAS object $O$ stores a value from some set and supports two atomic operations $O$.\CAS{} and $O$.\Read{}.
Operation $O$.\Read{} returns the value stored in $O$.
Operation $O$.\CAS{$exp,new$} takes two arguments $exp$ and $new$ and attempts to change the value of $O$ from $exp$ to $new$.
If the value of $O$ equals $exp$ then the operation $O$.\CAS{$exp,new$} \emph{succeeds}, and the value of $O$ is changed from $exp$ to $new$, and \True\ is returned.
Otherwise, the operation fails, and the value of $O$ remains unchanged and \False\ is returned.

In addition, a process can execute local coin flip operations that returns an  integer value distributed uniformly at random from an arbitrary finite set of integers.
The scheduling, generated by the \emph{adversary}, can depend on the random values generated by the processes.
We assume the weak adversary model (see for example \cite{Aspnes:AdversaryModels}) that decides at each point in time the process that takes the next step.
In order to make this decision, it can take all preceding events into account, except the results of the most recent coin flips by processes that are yet to execute a shared memory operation after the coin flip.

As mentioned earlier, we consider the \emph{cache-coherent} (CC) model where each processor has a private cache in which it maintains local copies of shared objects that it accesses.
The private cache is logically situated ``closer'' to the processor than the shared memory, and therefore it can be accessed for free.
The shared memory is an external memory accessible to all processors, and is considered remote to all processors.
We assume that a  hardware protocol ensures cache consistency (i.e., that all copies of the same object in different caches are valid and consistent).
A memory access to a shared object that requires access to remote memory is called a \emph{remote memory reference} (RMR).
The \emph{RMR complexity} of a algorithm is the maximum number of RMRs that a process can incur during any execution of the algorithm.

\subsection{Results}

We present several building blocks for our algorithm
in Section~\ref{sec:RCASCounter}.
In Sections~\ref{sec:ARLockTree} and \ref{sec:ARLockArray} we give an overview of the randomized mutual exclusion algorithm.
Our results are summarized by the following theorem.
\begin{theorem}\label{thm:main}
There exists a starvation-free randomized abortable $N$ process lock against the weak adversary, where a process incurs $\Order{\log N / \log \log N}$ RMRs in expectation per passage.
The lock requires \Order{N} \CAS\ objects and read-write registers
\end{theorem}

\section{Building Blocks}
\label{sec:BuildingBlocks}

\paragraph{A Randomized CAS Counter.}
\label{sec:RCASCounter}

A \emph{CAS counter} object with parameter $k \in \mathds{Z}^+$ complements a \CAS\ object by supporting an additional \inc{} operation (apart from \CAS{} and \Read{} operations) that increments the object's value.
The object takes values in \Set{0,\ldots,k}, and initially the object's value is $0$.
Operation \inc{} takes no arguments, and if the value of the object is in \Set{0,\ldots,k-1}, then the operation increments the value and returns the previous value.
Otherwise, the value of the object is unchanged and the integer $k$ is returned.
We will use such an object for $k=2$ to assign three distinct roles to processes.

Our implementation of the \inc{} operation needs only $O(1)$ RMRs in expectation.
A deterministic implementation of a \CAS counter for $k=2$ and constant worst-case RMR complexity does not exist:
Replacing our randomized \CAS counter with a deterministic one that has worst-case RMR complexity $T$ yields a deterministic abortable mutual exclusion algorithm with worst-case RMR complexity $\Order{T\cdot\log N/\log\log N}$.
From the lower bound for deterministic mutual exclusion by Attiya etal.~\cite{Attiya:MELowerBound}, such an algorithm does not exist, unless $T=\Omega(\log\log N)$
\footnote{For the DSM model, this also follows from a result by Golab, Hadzilacos, Hendler, and Woelfel~\cite{Golab:CASImplementation}. They established a super-constant lower bound on the RMR complexity of a deterministic bounded counter that can count up to two, and also supports a reset operation.}

In Appendix~\ref{sec:appendix:RCASCounter}, we describe a randomized CAS counter, called \RCASCounter{k}, where the \inc{} method is allowed to fail.
The idea is, that to increase the value of the object, a process randomly guesses its current value, $v$, and then executes a \CAS{$v$,$v+1$} operation.
An adaptive adversary could intervene between the steps involving the random guess and the subsequent \CAS operation, thereby affecting the failure probability of an \inc{} method call, but a weak adversary cannot do so.
\begin{lemma}
\label{thm:ctr:linearizable}
Object \RCASCounter{k} is a randomized wait-free linearizable CAS Counter, where the probability that an \inc{} method call fails is $\frac{k}{k+1}$ against the weak adversary.
Each of the methods of $\RCASCounter{k}$ has \Order{1} step complexity.
\end{lemma}

\paragraph{A Single-Fast-Multi-Slow Universal Construction.}
\label{sec:SFMSUniversalConstruction}

A \emph{universal construction} object provides a linearizable concurrent implementation of any object with a sequential specification that can be given by deterministic code.
In Appendix~\ref{appendix:sec:AbortableProArray} we devise a universal construction object \UC{\T} for $N$ processes \footnote{We use the universal construction object for smaller sets of processes, specifically for sets of size \Order{\log N / \log \log N}.} which provides two methods, \performFast{$op$} and \performSlow{$op$}, to perform any operation $op$ on an object of type \T.
The idea is that \performFast{} methods cannot be called concurrently, but are executed very fast, i.e., they have \Order{1} step complexity.
On the other hand, \performSlow{} methods need \Order{N} steps.
The algorithm is based on a helping mechanism in which \performSlow{} methods help a process that wants to execute a \performFast{} method.
\begin{lemma}\samepage
\label{theorem:UC}
Object \UC{\T} is a wait-free universal construction that implements an object \Obj\ of type \T, for $N$ processes,
 and an operation $op$ on object \Obj\ is performed by executing either method \performFast{op} or \performSlow{op}, and no two processes execute method \performFast{} concurrently.
Methods \performFast{} and \performSlow{} have \Order{1} and \Order{N} step complexity respectively.
\end{lemma}

\paragraph{The Abortable Promotion Array.}
\label{sec:AbortableProArray}
An object $O$ of type \APArray{k} stores a vector of $k$ integer pairs.
It provides some specialized operations on the vector, such as conditionally adding/removing elements, and earmarking a process (associated with an element of the vector) for some future activity.
Initially the value of $O=(O[0],O[1],\ldots,O[k-1])$ is $(\pair{0}{\bot},\ldots,\pair{0}{\bot})$.
The object supports operations \collect{}, \abort{}, \promote{}, \remove{} and \reset{} (see Figure~\ref{fig:SArray:seq} in the appendix).
Operation \collect{$X$} takes as argument an array $X[0 \ldots k-1]$ of integers, and is used to ``register'' processes into the array.
The operation changes $O[i]$, for all $i$ in \Set{0,\ldots,k-1}, to value \pair{\cReg}{X[i]} except if $O[i]$ is $\pair{\cAbort}{s}$, for some $s \in \mathbb{Z}$.
In the latter case the value of $O[i]$ is unchanged.
Process $i$ is said to be \emph{registered} in the array if a \collect{} operation changes $O[i]$ to value \pair{\cReg}{s}, for some $s \in \mathbb{Z}$.
The object also allows processes to ``abort'' themselves from the array using the operation \abort{}.
Operation \cUpdate{$i,s$} takes as argument the integers $i$ and $s$, where $i \in \Set{0,\ldots,k-1}$ and $s \in \mathbb{Z}$.
The operation changes $O[i]$ to value \pair{\cAbort}{s} and returns \True, only if $O[i]$ is not equal to \pair{\cPro}{s'}, for some $s' \in \mathbb{Z}$.
Otherwise the operation returns \False.
Process $i$ \emph{aborts} from the array if it executes an \cUpdate{$i,s$} operation that returns \True.
A registered process in the array that has not aborted can be ``promoted'' using the \promote{} operation.
Operation \promote{} takes no arguments, and
changes the value of the element in $O$ with the smallest index and that has value \pair{\cReg}{s}, for some $s \in \mathbb{Z}$, to value \pair{\cPro}{s}, and returns \pair{i}{s}, where $i$ is the index of that element.
If there exists no element in $O$ with value \pair{\cReg}{s}, for some $s \in \mathbb{Z}$, then $O$ is unchanged and the value $\pair{\bot}{\bot}$ is returned.
Process $i$ is \emph{promoted} if a \promote{} operation returns \pair{i}{s}, for some $s \in \mathbb{Z}$.
Operation \reset{} resets the entire array to its initial state.

Note that an aborted process in the array, cannot be registered into the array or be promoted, until the array is reset.
If a process tries to abort itself from the array but finds that it has already been promoted, then the abort fails.
This ensures that a promoted process takes responsibility for some activity that other processes expect of it.

In the context of our abortable lock, the $i$-th element of the array stores the current state of process with ID $i$, and a sequence number associated with the state.
Operation \collect{} is used to register a set of participating processes into the array.
Operation \cUpdate{$i,s$} is executed only by process $i$, to abort from the array.
Operation \promote{} is used to promote an unaborted registered process from the array, so that the promoted process can fulfill some future obligation.

In our abortable lock of Section~\ref{sec:ARLockTree}, we need a wait-free linearizable implementation of type \APArray{\Delta}, where $\Delta$ is the maximum number of processes that can access the object concurrently, and we achieve this by using object \UC{\APArray{\Delta}}.
We ensure that no two processes execute operations \collect{}, \promote{}, \reset{} or \remove{} concurrently, and therefore by we get \Order{1} step complexity for these operations by using method \performFast{}.
Operation \abort{} has \Order{\Delta} step complexity since it is performed using method \performSlow{}, which allows processes to call \abort{} concurrently.

\section{The Tree Based Abortable Lock}
\label{sec:ARMLockStateless}
\label{sec:ARLockTree}

Our abortable lock algorithm is based on an arbitration tree with branching factor approximately $\Theta(\log N/\log\log N)$.
For convenience we assume (w.l.o.g.) that $N = \Delta^{\Delta-1}$ for some positive integer $\Delta$, where $N$ is the maximum number of processes in the system.
Then it follows that $\Delta = \Theta (\log N $/ $\log \log N)$.

As in the algorithm by Hendler and Woelfel \cite{Philipp:RLock}, we consider a tree with $N$ leafs and where each non-leaf node has $\Delta$ children.
Every non-leaf node is associated with a lock.
Each process is assigned a unique leaf in the tree and climbs up the tree by capturing the locks on nodes on its path until it has captured the lock at the root.
Once a process locks the root, it can enter the Critical Section.

The main difficulty is that of designing the locks associated with the nodes of the tree.
A simple \CAS\ object together with an ``announce array'' as used in \cite{Philipp:RLock} does not work.
Suppose a process $p$ captures locks of several nodes on its path up to the root and aborts before capturing the root lock.
Then it must release all captured node locks and therefore these lock releases cause other processes, which are  busy-waiting on these nodes, to incur RMRs.
So we need a mechanism to guarantee some progress to these processes, while we also need a mechanism that allows busy-waiting processes to abort their attempts to capture node locks.
In \cite{Philipp:RLock} progress is achieved as follows: A process $p$, before releasing a lock on its path, searches(with a random procedure) for other processes that are busy-waiting for the node lock to become free.
If $p$ finds such a process, it promotes it into the critical section.
This is possible, because at the time of the promotion $p$ owns the root lock and can hand it over to a promoted process.
Unfortunately, this promotion mechanism fails for abortable mutual exclusion: When $p$ aborts its own attempt to enter the Critical Section, it may have to release node locks at a time when it doesn't own the root lock.
Another problem is that if $p$ finds a process $q$ that is waiting for $p$ to release a node-lock, then $q$ may have already decided to abort.
We use a carefully designed synchronization mechanism to deal with such cases.

To ensure that waiting processes make some progress, we desire that $p$ ``collect'' busy-waiting processes (if any) at a node into an instance of an object of type \APArray{\Delta}, \PawnSet,  using the operation \collect{}.
Once busy-waiting processes are collected into \PawnSet, $p$ can identify a busy-waiting process, if present, using the \PawnSet.\promote{} operation,
while busy-waiting processes themselves can abort using the \PawnSet.\abort{} operation.
Note that $p$ may have to read $\Order{\Delta}$ registers just to find a single busy-waiting process at a node, where $\Delta$ is the branching factor of the arbitration tree.
This is problematic since our goal is to bound the number of steps during a passage to \Order{\Delta} steps, and thus a process cannot collect at more than one node.
For this reason we desire that $p$ transfer all unreleased node locks that it owns to the first busy-waiting process it can find, and then it would be done.
And if there are no busy-waiting processes at a node, then $p$ should somehow be able to release the node lock in \Order{1} steps.
Since there are at most $\Delta$ nodes on a path to the root node, $p$ can continue to release captured node locks where there are no busy-waiting processes, and thus not incur more than \Order{\Delta} overall.
We use an instance of \RCASCounter{2}, \ctr, to help decide if there are any busy-waiting processes at a node lock.
Initially, \ctr\ is $0$, and processes attempt to increase \ctr\ using the \ctr.\inc{} operation after having registered at the node.
Process $p$ attempts to release a node lock by first executing a \ctr.\CAS{$1,0$} operation.
If the operation fails then some process $q$ must have further increased \ctr\ from $1$ to $2$, and thus $p$ can transfer all unreleased locks to $q$, if $q$ has not aborted itself.
If $q$ has aborted, then $q$ can perform the collect at the node lock for $p$, since $q$ can afford to incur an additional one-time expense of \Order{\Delta} RMRs.
If $q$ has not aborted then $p$ can transfer its captured locks to $q$ in \Order{1} steps, and thus making sure some process makes progress towards capturing the root lock.
We encapsulate these mechanisms in a randomized abortable lock object, \ARMLockArray{\Delta}.

More generally, we specify an object \ARMLockArray{n} for an arbitrary parameter $n< N$.
Object \ARMLockArray{n} provides methods \lock{} and \release{}{} that can be accessed by at most $n+1$ processes concurrently.
The object is an abortable lock, but with an RMR complexity of $O(n)$ for the abort-way, and constant RMR complexity for \lock{}.
The \release{}{} method is special.
If it detects contention (i.e., other processes are busy-waiting), then it takes $O(n)$ RMRs, but helps those other processes to make progress.
Otherwise, it takes only $O(1)$ RMRs.
Each non-leaf node $u$ in our abritration tree will be associated with a lock \ARMLockArray{\Delta} and can only be accessed concurrently by the processes owning locks associated with the children of $u$ and one other process.

Method \lock{} takes a single argument, which we will call pseudo-ID, with value in \Set{0,\ldots,n-1}.
We denote a \lock{} method call with argument $i$ as \lock{i}, but refer to \lock{i} as \lock{} whenever the context of the discussion is not concerned with the value of $i$.
Method \lock{} returns a non-$\bot$ value if a process captures the lock, otherwise it returns a $\bot$ value to indicate a failed \lock{} call.
A \lock{} by process $p$ can fail only if $p$ aborts during the method call.
Method \release{}{} takes two arguments, a pseudo-ID $i \in \Set{0,\ldots,n-1}$ and an integer $j$.
Method \release{i}{j} returns \True\ if and only if there exists a concurrent call to \lock{} that eventually returns $j$.
Otherwise method \release{i}{j} returns \False.
The information contained in argument $j$ determines the transfered node locks.
Process pseudo-IDs are passed as arguments to the methods to allow the ability for a process to ``transfer'' the responsibility of releasing the lock to another process.
Specifically, we desire that if a process $p$ executes a successful \lock{i} call and becomes the owner of the lock, then $p$ does not have to release the lock itself, if it can find some process $q$ to call \release{i}{} on its behalf.
In Section \ref{sec:ARLockArray} we implement object \ARMLockArray{n}, and prove its properties in Appendix~\ref{sec:Analysis}, and thus we get the following lemma.

\begin{lemma}
\label{theorem:ARMLockArray}
Object \ARMLockArray{n} can be implemented against the weak adversary for the CC model with the following properties using only \Order{n} \CAS\ objects and read-write registers.
\begin{enumerate}[(a)]
 \item Mutual exclusion, starvation freedom, bounded exit, and bounded abort.
 \item The abort-way has \Order{n} RMR complexity.
 \item If a process does not abort during a \lock{} call, then it incurs \Order{1} RMRs in expectation during the call, otherwise it incurs \Order{n} RMRs in expectation during the call.
 \item If a process' call to \release{}{j} returns \False, then it incurs \Order{1} RMRs during the call, otherwise it incurs \Order{n} RMRs during the call.
\end{enumerate}
\end{lemma}

\paragraph{High Level Description of the Abortable Lock.}
We use a complete $\Delta$-ary tree \tree\ of height $\Delta$ with $N$ leaves, called the arbitration tree.
The root has height $\Delta$ and the leaves of the tree have height 0.
The $N$ processes in the system line up as $N$ unique leaf nodes, such that each process $p$ is associated with a unique leaf $\myleaf{p}$ in the tree.
Let \mypath{p} denote the path from \myleaf{p} up to \root, and \h{u} denote the height of node $u$.

Each node of our arbitration tree \tree\ is a structure of type \Node\ that contains a single instance \L\ of the abortable randomized lock object $\ARMLockArray{\Delta}$.
This allows processes the ability to abort their attempt at any point in time during their ascent to the root node.

\bparagraph{Lock capture protocol - \lock{p}}
During \lock{p} a process $p$ attempts to \textit{capture} every node on its path \mypath{p} that it does not own, as long as $p$ has not received a signal to abort.
Process $p$ attempts to capture a node $u$ by executing a call to $u$.\L.\lock{}.
If $p$'s $u$.\L.\lock{} call returns $\infty$ then $p$ is said to have captured $u$, and if the call returns an integer $j$, then $p$ is said to have been \emph{handed over} all nodes from $u$ to $v$ on \mypath{p}, where $\h{v} = j$.
We ensure that $j \geq \h{u}$.
Process $p$ starts to \textit{own} node $u$ when $p$ captures $u$.\L\ or when $p$ is handed over node $u$ from the previous owner of node $u$.
Process $p$ can enter its Critical Section when it owns the root node of \tree.
Process $p$ may receive a signal to abort during a call to $u$.\L.\lock{} as a result of which $p$'s call to $u$.\L.\lock{} returns either $\bot$ or a non-$\bot$ value.
In either case, $p$ then calls \release{p}{} to release all locks of nodes that $p$ has captured in its passage, and then returns from its \lock{p} call with value $\bot$.

\bparagraph{Lock release protocol - \release{p}{}}
An exiting process $p$ \emph{releases} all nodes that it owns during \release{p}{}.
Process $p$ is said to \textit{release} node $u$ if $p$ releases $u$.\L\ (by executing $u$.\L.\release{}{} call), or if $p$ hands over node $u$ to some other process.
Recall that $p$ hands over node $u$ if $p$ executes a $v$.\L.\release{}{j} call that returns \True\ where $\h{v} \leq \h{u} \leq j$.
Let $s$ be the height of the highest node $p$ owns.
During \release{p}{}, $p$ climbs up \tree\ and calls $u$.\L.\release{p}{s} at every node $u$ that it owns, until a call returns \True.
If a $u$.\L.\release{p}{s} call returns \False (process $p$ incurs \Order{1} steps), then $p$ is said to have released lock $u$.\L\ (and therefore released node $u$), and thus $p$ continues on its path.
If a $u$.\L.\release{p}{s} call returns \True (process $p$ incurs \Order{\Delta} steps), then $p$ has handed over all remaining nodes that it owns to some process that is executing a concurrent $u$.\L.\lock{} call at node $u$, and thus $p$ does not release any more nodes.

Notice that our strategy to release node locks is to climb up the tree until all node locks are released or a hand over of remaining locks is made.
Climbing up the tree is necessary (as opposed to climbing down) in order to hand over node locks to a process, say $q$, such that the handed over nodes lie on $\mypath{q}$.

\section{The Array Based Abortable Lock}
\label{sec:ARLockArray}

We specified object \ARMLockArray{n} in Section \ref{sec:ARLockTree} and now we describe and implement it (see Figures~\ref{fig:ARMEAlgorithm1} and \ref{fig:ARMEAlgorithm2}).
Let $\L$ be an instance of object \ARMLockArray{n}.
{\renewcommand{\baselinestretch}{0.75}
\begin{classfigure}[!htbp]
\begin{object}{\ARMLockArray{n}} \label{algo:ARMLockStructure}
  \shared \;
    \qquad $\ctr$: \RCASCounter{2} \Init $0$;\;
    \qquad $\PawnSet$: Object of type $\APArray{n}$ \Init $\varnothing$;\;
    \qquad $\Apply$: \Array $[0 \dots n-1]$ \Of \Int\ pairs \Init all $\pair{\bot}{\bot}$;\;
     \qquad $\Role$: \Array $[0 \dots n-1]$ \Of \Int \Init $\bot$;\;
    \qquad $\X,\LSync$: \Int \Init $\bot$;\;
    \qquad \cKing, \cQueen, \cPawn, \cPPawn, \cWant, \cOk: \const \Int\ $0,1,2,3,4,5$ respectively;\;
    \qquad \getSequenceNo{}: returns integer $k$ on being called for the $k$-th time from a call to \;
    \qquad \lock{i}. (Since calls to \lock{i} are executed sequentially, a sequential shared counter \;
    \qquad suffices to implement method \getSequenceNo{}.)\;
  \local \;
    \qquad $s,val,seq,dummy$: \Int \Init $\bot$;\;
    \qquad $flag,r$: \Bool \Init $\False$;\;
    \qquad $A$: \Array $[0 \dots n-1]$ \Of \Int \Init $\bot$ \;
\tcp{If process $i$ satisfies the loop condition in line~\ref{getLock:ApplyBotWant},~\ref{getLock:awaitAckOrCtrDecrease}, or~\ref{getLock:awaitX}, and $i$ has received a signal to abort, then $i$ calls \abort{i}}
\end{object}
\begin{minipage}{0.56\textwidth}
\LinesNumbered
\begin{algorithm}[H]\Method{lock$_{i}$( )} \label{function:getLock}
\setcounter{AlgoLine}{0}
  $s$ \la\ \getSequenceNo{} \; \label{getLock:getSequenceNo}
  \Await {\Apply$[i]$.\CAS{$\pair{\bot}{\bot},\pair{\cWant}{s}$}} \;  \label{getLock:ApplyBotWant}
 $flag$ \la\ \True \;  \label{getLock:setFlag}
      \Repeat {$(\Role[i] \in \Set{\cKing, \cQueen, \cPPawn})$ } {                  \label{getLock:BeginInnerLoop}
          $\Role[i]$ \la\  $\ctr$.\inc{}       \;              \label{getLock:IncCounter}
          \If {$(\Role[i] = \cPawn)$}  {                          \label{getLock:ifSoldier}
              \Await {$\Apply[i] = \pair{\cOk}{s} \vee \ctr.\Read{} \neq 2$} \;  \label{getLock:awaitAckOrCtrDecrease}
              \If {$(\Apply[i] = \pair{\cOk}{s})$} {                  \label{getLock:ifBackpacked}
                  $\Role[i]$ \la\ \cPPawn \;                   \label{getLock:RolePPawn}
              }
          }
      }                                                     \label{getLock:EndInnerLoop}
  \If {$(\Role[i] = \cQueen)$}  {                            \label{getLock:ifQueen}
        \Await{$\X \neq \bot$}  \;                            \label{getLock:awaitX}
  }
  \Apply[i].\CAS{$\pair{\cWant}{s},\pair{\cOk}{s}$} \;                          \label{getLock:ApplyWantOk}
   \lIf {$\Role[i]=\cQueen$} {                              \label{getLock:ifRolePQueen}
       \return \X                                           \label{getLock:returnX}
   }
   \lElse {
       \return $\infty$ \;                                  \label{getLock:returninfty}
   }                                                        \label{getLock:end}
\end{algorithm}
\end{minipage}
\begin{minipage}{0.44\textwidth}
\LinesNumbered
\begin{algorithm}[H]\Method{abort$_{i}$( )} \label{function:abort}
  \lIf{$\neg flag$} {                     \label{abort:ifNotRegistered} \label{abort:ifFlag}
      \return $\bot$ \;                            \label{abort:returnbot}
  }
  \Apply[i].\CAS{$\pair{\cWant}{s},\pair{\cOk}{s}$} \;              \label{abort:ApplyWantOk}
  \eIf {$\Role[i] = \cPawn$} {                 \label{abort:ifPawn}
      \If {$\neg \PawnSet$.\cUpdate{$i,s$}} {  \label{abort:ifHead}
        $\Role[i]$ \la\ \cPPawn \;              \label{abort:RolePPawn}
        \return $\infty$ \;              \label{abort:returninfty}
      }
  } {
  \If {$\neg$\X.\CAS{$\bot,\infty$}} {                     \label{abort:setX}
        \return \X \;                     \label{abort:returnX}
  }
      \doCollect{i} \;                               \label{abort:doCollect}
      \helpRelease{i} \;                            \label{abort:callhRelease}
  }
  \Apply$[i]$.\CAS{$\pair{\cOk}{s},\pair{\bot}{\bot}$} \;    \label{abort:ApplyOkBot}
  \return $\bot$ \;                                \label{abort:returnr}
\end{algorithm}
\end{minipage}
\begin{minipage}{\textwidth}
\LinesNumbered
\begin{algorithm}[H]\Method{doCollect$_{i}$()} \label{function:doCollect}
\setcounter{AlgoLine}{50}
      \For {$k \la 0$ \KwTo\ $n-1$} {           \label{collect:collectLoop}
            $\pair{val}{seq}$ \la\ \Apply$[k]$ \; \label{collect:ApplyRead}
            \lIf {$val = \cWant$} {          \label{collect:IfRegistered}
                $A[k]$ \la\ $seq$
            }
            \lElse {
                $A[k]$ \la\ $\bot$ \;
            }
      }
    \PawnSet.\collect{$A$} \;      \label{collect:updateAll}
\end{algorithm}
\end{minipage}
\caption{Implementation of Object \ARMLockArray{n}}\label{fig:ARMEAlgorithm1}
\end{classfigure}

\begin{classfigure}[!htbp]

\begin{minipage}{0.5\textwidth}
\LinesNumbered
\setcounter{AlgoLine}{33}
\begin{algorithm}[H]\Method{release$_{i}$(int $j$)}  \label{function:release}
  $r$ \la\ \False \;                        \label{release:setrNotCollected} \label{release:safetyCheck}
      \If {$\Role[i] = \cKing$} {                       \label{release:ifKing}
          \If {$\neg$\ctr.\CAS{$1,0$}} {               \label{release:ctr10}
            $r$ \la\ \X.\CAS{$\bot,j$} \;              \label{release:setX}
            \lIf {$r$} {
                \doCollect{i} \;                         \label{release:doCollect}
            }
              \helpRelease{i} \;                            \label{release:callhRelease:King}
          }                                          \label{release:endIfFlag}
      }
      \If {$\Role[i] = \cQueen$}  {            \label{release:ifQueen}
        \helpRelease{i} \;                                  \label{release:callhRelease:Queen}
      }
      \If {$\Role[i] = \cPPawn$} {      \label{release:ifPPawn}
             \doPromote{i} \;           \label{release:callPromote}
      }
  \pair{dummy}{s} \la\ \Apply$[i]$ \;   \label{release:ApplyRead}
  \Apply$[i]$.\CAS{$\pair{\cOk}{s},\pair{\bot}{\bot}$} \;    \label{release:ApplyOkBot}
  \return $r$ \;                        \label{release:return}
\end{algorithm}
\end{minipage}
\begin{minipage}{0.5\textwidth}
\LinesNumbered
\begin{algorithm}[H]\Method{helpRelease$_{i}$()} \label{function:hRelease}
\setcounter{AlgoLine}{55}
   \DontPrintSemicolon
   \If {$\neg$\LSync.\CAS{$\bot,i$}} {                    \label{hRelease:setT}
       $j$ \la\ \X.\Read{} \;                            \label{hRelease:readX}
       \X.\CAS{$j,\bot$} \;          \label{hRelease:resetX}
       $j$ \la\ \LSync.\Read{} \;                    \label{hRelease:readT}
       \LSync.\CAS{$j,\bot$} \;                            \label{hRelease:resetT}
       \PawnSet.\remove{$j$} \;                \label{hRelease:collectFixOther}
       \doPromote{i}                       \label{hRelease:callPromote}
   }                                     \label{hRelease:end}
\end{algorithm}
\LinesNumbered
\begin{algorithm}[H]\Method{doPromote$_{i}$()}  \label{function:promote}
  \DontPrintSemicolon
    \PawnSet.\remove{$i$} \;                \label{promote:collectFixSelf}
    \pair{j}{seq} \la\ \PawnSet.\promote{} \;  \label{promote:FR12}
    \eIf {$j = \bot$} {                         \label{promote:ifNotPromoted}
        \PawnSet.\reset{} \;              \label{promote:resetBackpack}
        \ctr.\CAS{$2,0$} \;                   \label{promote:ctr20}
    } {
        \Apply[$j$].\CAS{$\pair{\cWant}{seq},\pair{\cOk}{seq}$}\;  \label{promote:ApplyWantOk}
    }                                           \label{promote:end}
\end{algorithm}
\end{minipage}

\caption{Implementation of Object \ARMLockArray{n} (continued)}\label{fig:ARMEAlgorithm2}
\end{classfigure}
\renewcommand{\baselinestretch}{1.0}}

\bparagraph{Registering and Roles at lock \L}
At the beginning of a \lock{} call processes \emph{register} themselves in the \Apply\ array by swapping the value $\cWant$ atomically into their designated slots (\Apply[i] for process with pseudo-ID $i$) using a \CAS\ operation.
The array {\Apply} of $n$ \CAS\ objects is used by processes to register and ``deregister'' themselves from lock \L, and to notify each other of certain events at lock \L.

On registering in the \Apply\ array, processes attempt to increase \ctr, an instance of \RCASCounter{2}, using operation \ctr.\inc{}.
Recall that $\RCASCounter{2}$ is a bounded counter, initially 0, and returns values in \Set{0,1,2} (see Section~\ref{sec:RCASCounter}).
Each of these values corresponds to a role at lock \L.
There are four \emph{roles} that a process can assume during its passage of lock \L, namely \emph{king}, \emph{queen}, \emph{pawn} and \emph{promoted pawn}, and a role defines the protocol a process follows during a passage.
During an execution, \ctr\ cycles from its initial value $0$ to non-$0$ values and then back to $0$, multiple times, and we refer to each such cycle as a \ctr-cycle.
The process that increases \ctr\ from $0$ to $1$ becomes the king.
The process that increases \ctr\ from $1$ to $2$ becomes the queen.
All processes that attempt to increase \ctr\ any further, are returned value $2$ (by specification of object \RCASCounter{2}), and they assume the role of a pawn process.
A pawn process busy-waits until it gets ``promoted'' at lock \L\ (a process is said to be \emph{promoted} at lock \L\ if it is promoted in \PawnSet), or until it sees the \ctr\ value decrease, so that it can attempt to increase \ctr\ again.
We ensure that a pawn process repeats an attempt to increase \ctr\ at most once, before getting promoted.
We ensure that at any point in time during the execution, the number of processes that have assumed the role of a king, queen and promoted pawn at lock \L, respectively, is at most one, and thus we refer to them as \king{\L}, \queen{\L} and \ppawn{\L}, respectively.
We describe the protocol associated with each of the roles in more detail shortly.
An array {\Role} of $n$ read-write registers is used by processes to record their role at lock \L.

\bparagraph{Busy-waiting in lock \L}
The king process, \king{\L}, becomes the first owner of lock \L\ during the current \ctr-cycle, and can proceed to enter its Critical Section, and thus it does not busy-wait during \lock{}.
The queen process, \queen{\L}, must wait for \king{\L}  for a notification of its turn to own lock \L.
Then \queen{\L} spins on \CAS\ object \X, waiting for \king{\L} to \CAS\ some integer value into \X.
Process \king{\L} attempts to \CAS\ an integer $j$ into \X\ only during its call to \release{}{j}, after it has executed its Critical Section.
The pawn processes wait on their individual slots of the \Apply\ array for a notification of their promotion.

\bparagraph{A \emph{collect} action at lock \L}
A collect action is conducted by either \king{\L} during a call to \release{}{}, or by \queen{\L} during a call to \abort{}.
A collect action is defined as the sequence of steps executed by a process during a call to \doCollect{}.
During a call to \doCollect{}, the collecting process (say $q$) iterates over the array \Apply\ reading every slot, and then creates a local array $A$ from the values read and stores the contents of $A$ in the \PawnSet\ object in using the operation \PawnSet.\collect{A}.
A key point to note is that operation \PawnSet.\collect{A} does not overwrite an aborted process's value in \PawnSet\ (a process aborts itself in \PawnSet\ by executing a successful \PawnSet.\abort{} operation).

\bparagraph{A \emph{promote} action at lock \L}
Operation \PawnSet.\promote{} during a call to method \doPromote{} is defined as a promote action.
The operation returns the pseudo-ID of a process that was collected during a collect action, and has not yet aborted from \PawnSet.
A promote action is conducted at lock \L\ either by \king{\L}, \queen{\L} or \ppawn{\L}.

\bparagraph{Lock \emph{handover} from \king{\L} to \queen{\L}}
As mentioned, process \queen{\L} waits for \king{\L} to finish its Critical Section and then call \release{}{j}.
During \king{\L}'s \release{}{j} call, \king{\L} attempts to swap integer $j$ into \CAS object \X, that only \king{\L} and \queen{\L} access.
If \queen{\L} has not ``aborted'', then \king{\L} successfully swaps $j$ into \X, and this serves as a notification to \queen{\L} that \king{\L} has completed its Critical Section, and that \queen{\L} may now proceed to enter its Critical Section.

\bparagraph{\emph{Aborting} an attempt at lock \L\ by \queen{\L}}
On receiving  a signal to abort, \queen{\L} abandons its \lock{} call and executes a call to \abort{} instead.
\queen{\L} first changes the value of its slot in the \Apply\ array from \cWant\ to \cOk, to prevent itself from getting collected in future collects.
Since \king{\L} and \queen{\L} are the first two processes at \L, \king{\L} will eventually try to handover \L\ to \queen{\L}.
To prevent \king{\L} from handing over lock \L\ to \queen{\L}, \queen{\L} attempts to swap a special value $\infty$ into \X\ in one atomic step.
If \queen{\L} fails then this implies that \king{\L} has already handed over \L\ to \queen{\L}, and thus \queen{\L} returns from its call to \abort{} with the value written to \X\ by \king{\L}, and becomes the owner of \L.
If \queen{\L} succeeds then \queen{\L} is said to have successfully aborted, and thus \king{\L} will eventually fail to hand over lock \L.
Since \queen{\L} has aborted, \queen{\L} now takes on the responsibility of collecting all registered processes in lock \L, and storing them into the \PawnSet\ object.
After performing a collect, \queen{\L} then synchronizes with \king{\L} again, to perform a promote, where one of the collected processes is promoted.
After that, \queen{\L} deregisters from the \Apply\ array by resetting its slot to the initial value \pair{\bot}{\bot}.

\bparagraph{\emph{Aborting} an attempt at lock \L\ by a pawn process}
On receiving a signal to abort a pawn process (say $p$) busy-waiting in lock \L, abandons its \lock{} call and executes a call to \abort{} instead.
Process $p$ first changes the value of its slot in the \Apply\ array from \cWant\ to \cOk, to prevent itself from getting collected in future collects.
It then attempts to abort itself in \PawnSet\ by executing the operation \PawnSet.\cUpdate{$p$}).
If $p$'s attempt is unsuccessful then it implies that $p$ has already been promoted in \PawnSet, and thus $p$ can assume the role of a promoted pawn, and become the owner of \L.
In this case, $p$ returns from its \abort{} call with value $\infty$ and becomes the owner of \L.
If $p$'s attempt is successful then $p$ cannot be collected or promoted in future collects and promotion events.
In this case, $p$ deregisters from the \Apply\ array by resetting its slot to the initial value \pair{\bot}{\bot}, and returns $\bot$ from its call to \abort{}.

\bparagraph{Releasing lock \L}
Releasing lock \L\ can be thought of as a group effort between the \king{\L}, \queen{\L} (if present at all), and the promoted pawns (if present at all).
To completely release lock \L, the owner of \L\ needs to reset \ctr\ back to $0$ for the next \ctr-cycle to begin.
However, the owner also has an obligation to hand over lock \L\ to the next process waiting in line for lock \L.
We now discuss the individual strategies of releasing lock \L, by \king{\L}, \queen{\L} and the promoted processes.
To release lock \L, the owner of \L\ executes a call to \release{}{j}, for some integer $j$.

\bparagraph{Synchronizing the release of lock \L\ by \king{\L} and \queen{\L}}
Process \king{\L} first attempts to decrease \ctr\ from $1$ to $0$ using a \CAS\ operation.
If it is successful, then \king{\L} was able to end the \ctr-cycle before any process could increase \ctr\ from $1$ to $2$.
Thus, there was no \queen{\L} process or pawn processes waiting for their turn to own lock \L, during that \ctr-cycle.
Then \king{\L} is said to have released lock \L.

If \king{\L}'s attempt to decrease \ctr\ from $1$ to $0$ fails, then \king{\L} knows that there exists a \queen{\L} process that increased \ctr\ from $1$ to $2$.
Since \queen{\L} is allowed to abort, releasing lock \L\ is not as straight forward as raising a flag to be read by \queen{\L}.
Therefore, \king{\L} attempts to synchronize with \queen{\L} by swapping the integer $j$ into the object \X\ using a \X.\CAS{$\bot,j$} operation.
Recall that \queen{\L} also attempts to swap a special value $\infty$ into object \X\ using a \X.\CAS{$\bot,j$} operation, in order to abort its attempt.
Clearly only one of them can succeed.
If \king{\L} succeeds, then \king{\L} is said to have successfully handed over lock \L\ to \queen{\L}.
If \king{\L} fails, then \king{\L} knows that \queen{\L} has aborted and thus \king{\L} then tries to hand over its lock to one of the waiting pawn processes.
The procedure to hand over lock \L\ to one of the waiting pawn processes is to execute a collect action followed by a promote action.

The collect action needs to be executed only once during a \ctr-cycle, and thus we let the process (among \king{\L} or \queen{\L}) that successfully swaps a value into \X, execute the collect action.

If \king{\L} successfully handed over \L\ to \queen{\L}, it collects the waiting pawn processes, so that eventually when \queen{\L} is ready to release lock \L, \queen{\L}  can simply execute a promote action.
Since there is no guarantee that \king{\L} will finish collecting before \queen{\L} desires to execute a promote action, the processes synchronize among themselves again, to execute the first promote action of the current \ctr-cycle.
They both attempt to swap their pseudo-IDs into an empty \CAS object \LSync, and therefore only one can succeed.
The process that is unsuccessful, is the second among them, and therefore by that point the collection  of the waiting pawn process must be complete.
Then the process that is unsuccessful, resets \X\ and \LSync\ to their initial value $\bot$, and then executes the promote action, where a waiting pawn process is promoted and handed over lock \L.
If no process were collected during the \ctr-cycle, or all collected pawn processes have successfully aborted before the promote action, then the promote action fails, and thus the owner process resets the \PawnSet\ object, and then resets \ctr\ from $2$ to $0$ in one atomic step, thus releasing lock \L, and resetting the \ctr-cycle.

\bparagraph{The release of lock \L\ by \ppawn{\L}}
If a process was promoted by \king{\L} or \queen{\L} as described above, then the promoted process is said to be handed over the ownership of \L, and becomes the first promoted pawn of the \ctr-cycle.
Since a collect for this \ctr-cycle has already been executed, process \ppawn{\L} does not execute any more collects, but simply attempts to hand over lock \L\ to the next collected process by executing a promote action.
This sort of promotion and handing over of lock \L\ continues until there are no more collected processes to promote, at which point the last promoted pawn resets the \PawnSet\ object, and then resets \ctr\ from $2$ to $0$ in one atomic step, thus releasing lock \L, and resetting the \ctr-cycle.

All owner processes also \emph{deregister} themselves from lock \L, by resetting their slot in the \Apply\ array to the initial value \pair{\bot}{\bot}.
This step is the last step of their \release{}{j} calls, and processes return a boolean to indicate whether they successfully wrote integer $j$ into \X\ during their \release{}{j} call.
Note that only \king{\L} could possibly return \True\ since it is the only process that attempts to do so, during its \release{}{j} call.

\section{Conclusion}
We presented the first randomized abortable lock that achieves sub-logartihmic expected RMR complexity.
While the speed-up is only a modest $O(\log\log n)$ factor over the most efficient deterministic abortable mutual exclusion algorithm, our result shows that randomization can help in principle, to improve the efficiency of abortable locks.
Unfortunately, our algorithm is quite complicated; it would be nice to find a simpler one.
It would also be interesting to find an algorithm with sub-logarithmic RMR complexity that works against the stronger adversary.
In the weak adversary model, no non-trivial lower bounds for mutual exclusion are known, but it seems hard to improve upon $O(\log n/\log\log n)$ RMR complexity, even without the abortability property.

As shown by Bender and Gilbert, \cite{BenderGilbert:ME}, the picture looks different in the oblivious adversary model.
However, their algorithm is only lock-free with high probability.
It would be interesting to find a mutual exclusion algorithm with $o(\log n/\log\log n)$ RMR complexity against the oblivious adversary that is lock-free with probability one.
It would also be interesting to know whether such an algorithm can be made abortable.

\subsubsection*{Acknowledgement.}
We are indebted to Lisa Higham and Bill Sands for their careful reading of an earlier version of the paper and their valuable comments.
We also thank the anonymous referees of DISC 2012 for their helpful comments.

\bibliographystyle{plain}

redpajama_set_name: RedPajamaArXiv


text:
Congress still wrangling over Zika funding for Central Florida, elsewhere
Updated: 7:29 PM EDT Sep 16, 2016
Chris Hush
The state is shelling out even more money to fight the Zika virus, as Congress fights over a bill to fund prevention. Central Florida still isn't getting the resources that some say is crucial to prevent the virus from spreading here. Chris Hush reports.
The state of Florida is shelling out even more money to fight the Zika virus, as Congress fights over a bill to fund prevention.Central Florida still isn't getting the resources some say are crucial to preventing the virus from spreading in the region."This is a moment that is critically important for Florida," said Anna Eskamani, of Planned Parenthood Central Florida. Eskamani said Planned Parenthood is doing something it has not done before.As the number of Zika cases continues to rise in the state, Planned Parenthood is putting a sharp focus on Zika prevention, along with other sexually transmitted disease prevention initiatives."If there were unlimited resources, I do think that having a prevention kit from the very beginning is absolutely ideal," Eskamani said.But the Department of Health told WESH 2 News that state and federally funded Zika prevention kits aren't being distributed in Central Florida. They're only available to pregnant women in areas where the virus has already been spread locally.This week, Gov. Rick Scott announced another $10 million in state funding to purchase the kits that Central Florida isn't yet seeing. The allocation comes as Congress continues to fight for a bill on Zika funding."We've allocated the dollars, whether it's education, whether it's testing," Scott said.The Centers for Disease Control kits contain condoms, bed netting, mosquito repellent spray and water tablets that kill off mosquitoes in standing water.Meanwhile, Planned Parenthood representatives will go to downtown Orlando Friday night to hand out contraceptives and Zika information, and will offer to spray people with insect repellent.WESH 2 News was told there isn't enough funding yet to hand out individual bottles of insect spray."We know budgets are limited," Eskamani said.As of Friday, Sept. 16, the Florida Department of Health reports there have been 835 documented cases of Zika in the state.
The state of Florida is shelling out even more money to fight the Zika virus, as Congress fights over a bill to fund prevention.
Central Florida still isn't getting the resources some say are crucial to preventing the virus from spreading in the region.
"This is a moment that is critically important for Florida," said Anna Eskamani, of Planned Parenthood Central Florida. Eskamani said Planned Parenthood is doing something it has not done before.
As the number of Zika cases continues to rise in the state, Planned Parenthood is putting a sharp focus on Zika prevention, along with other sexually transmitted disease prevention initiatives.
"If there were unlimited resources, I do think that having a prevention kit from the very beginning is absolutely ideal," Eskamani said.
But the Department of Health told WESH 2 News that state and federally funded Zika prevention kits aren't being distributed in Central Florida. They're only available to pregnant women in areas where the virus has already been spread locally.
This week, Gov. Rick Scott announced another $10 million in state funding to purchase the kits that Central Florida isn't yet seeing. The allocation comes as Congress continues to fight for a bill on Zika funding.
"We've allocated the dollars, whether it's education, whether it's testing," Scott said.
The Centers for Disease Control kits contain condoms, bed netting, mosquito repellent spray and water tablets that kill off mosquitoes in standing water.
Meanwhile, Planned Parenthood representatives will go to downtown Orlando Friday night to hand out contraceptives and Zika information, and will offer to spray people with insect repellent.
WESH 2 News was told there isn't enough funding yet to hand out individual bottles of insect spray.
"We know budgets are limited," Eskamani said.
As of Friday, Sept. 16, the Florida Department of Health reports there have been 835 documented cases of Zika in the state.


The Home Plate Center is a new office complex located near Safeco Field. The architectural millwork is a laminated veneer lumber with a clear finish. The custom curved reception desk is faced with Forms + Surfaces fused nickel and a silver finish, while an aquamarine glass countertop reflects the interior of this retail and office space.