[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 382

 
Zhunko:
Et alors ? Pourquoi aurait-il besoin de savoir ça ? L'accès atomique est assuré. C'est suffisant. Occupez-vous du reste vous-même. De quelle tâche parlez-vous ? C'est tout à fait abstrait.


L'accès atomique ne suffit pas. Il n'y a aucune garantie d'une exécution cohérente des tâches, certaines tâches peuvent être laissées de côté. Votre code et vos journaux montrent que les tâches sont exécutées au hasard et non de manière séquentielle.
 
Zhunko:
...Occupez-vous du reste vous-même...

C'est ce que je dis, vous devez le faire vous-même, il ne suffit pas de fournir un accès atomique.
 
Zhunko:
...C'est assez. Occupez-vous du reste vous-même....

Vadim, vous vous contredisez étonnamment. D'abord, vous écrivez que c'en est assez. Puis vous réalisez (ou devinez) que quelque chose d'autre doit être fait.
 
Bonne journée ! Veuillez écrire, après que GlobalVariableSet ("Profit_pomnim", Itogo_Profit) ;
ait été créé, peut-il être utilisé de manière traditionnelle -

Profit_pomnim=365 ; Bumbara=Profit_pomnim ; ou doit-il être appelé uniquement par des fonctions spéciales ? GlobalVariableSet("Profit_pomnim", 365) ;
 
Dimka-novitsek:
Bonne journée ! Veuillez écrire, après la création d'une variable globale GlobalVariableSet("Profit_pomnim", Itogo_Profit) ;
peut-elle être ensuite utilisée de façon traditionnelle -

Profit_pomnim=365 ; Bumbara=Profit_pomnim ; ou doit-elle être adressée uniquement par des fonctions spéciales ?


Bumbara=Profit_pomnim - vous ne pouvez pas faire cela, il n'y a pas de variable Profit_pomnim. Mais il y a une variable globale Profit_pomnim.

Voici comment cela devrait être : Bumbara=GlobalVariableGet("Profit_pomnim") ;

 
Integer:

L'accès atomique ne suffit pas. Il n'y a aucune garantie d'une exécution cohérente des tâches, certaines tâches peuvent être laissées de côté. Votre code et vos journaux montrent que les tâches sont exécutées de manière désordonnée et non séquentielle.
Je ne comprends pas... Qu'est-ce que tu veux dire... Quelle garantie ? Vous vous dites programmeur. Écrivez d'une manière qui est garantie. Comment une tâche peut-elle être "derrière le bot" ? Qu'est-ce que tu as écrit là-dedans qui ne marchera pas ?
Je soupçonne que vous faites une fixation sur un ordre spécial d'adressage de la ressource. C'est la mauvaise approche pour organiser l'algorithme. Écrivez-le de façon à ce que ça n'ait pas d'importance.
Entier:

C'est ce que je dis, vous devez prendre des mesures vous-même, mais fournir un accès atomique ne suffit pas.
Dans ma pratique, cela n'a jamais été nécessaire. Vous pouvez toujours éviter cette approche. Restez simple. Il fonctionnera de manière plus fiable.
Entier:

Vadim, vous vous contredisez étonnamment. Au début, vous écrivez que c'est suffisant. Puis il s'avère que vous comprenez (ou devinez) que quelque chose d'autre doit être fait.

Il n'y a pas de contradiction. La réponse ci-dessus.

====================

Quant au fait d'être compliqué, je me souviens que vous avez écrit une fonction avec un algorithme complexe pour calculer le nombre de jours dans un mois. Je souris encore quand je m'en souviens.

Dmitry, il n'est pas nécessaire de trop compliquer les choses. Si vous disposez de constantes, vous n'avez pas besoin de les calculer. Il suffit de les déclarer.

Il en va de même pour le multithreading. Si vous n'en avez pas besoin, vous ne devez pas l'utiliser. L'ordre particulier d'adressage d'une ressource implique une exécution monofilaire.

Entier:
Une dernière chose sur la régulation du système. Si plusieurs fils sont créés - oui, le système va réguler. Mais si quelqu'un de l'extérieur est entré dans ces fils, alors vous devez penser à tout vous-même, il n'y aura pas de miracle du système.
Qui est ce quelqu'un ? Personne d'autre ne se mêle de mes affaires. Vous devez écrire de manière à les protéger.

 

Zhunko:

1. Je ne comprends pas... Qu'est-ce que tu veux dire... Quelle garantie ?

2. vous vous dites programmeur.

3. Écrivez de façon à ce que ce soit garanti.

4. Comment une tâche peut-elle "passer derrière le bot" ? Qu'avez-vous écrit là-dedans pour qu'il ne soit pas exécuté ?

5. Je soupçonne que vous êtes fixé sur l'ordre spécial dans lequel la ressource est accessible. C'est la mauvaise approche pour organiser l'algorithme. Écrivez-le d'une manière qui n'a pas d'importance.

6. Dans ma pratique, cela n'a jamais été nécessaire. Vous pouvez toujours éviter cette approche. Restez simple. Il fonctionnera de manière plus fiable.

Il n'y a pas de contradiction. J'ai répondu ci-dessus.

====================

7. Quant au fait d'être compliqué, je me souviens que vous avez écrit une fonction avec un algorithme complexe pour calculer le nombre de jours dans un mois. Je souris encore quand je m'en souviens.

8. Dmitry, il n'est pas nécessaire de compliquer les choses. Si vous avez des constantes, vous n'avez pas besoin de les calculer. Il suffit de les déclarer.

9. Il en va de même pour le multithreading. Si vous n'en avez pas besoin, ne l'utilisez pas.

1. Désolé.

2. Où, quand, où ? Qu'est-ce que ça a à voir avec ça maintenant ?

3. J'écris d'une manière qui est garantie.

4. Tous ceux qui sont accessibles par voie atomique.

5. Non. Et pas en boucle, mais en prenant des mesures pour s'assurer que toutes les tâches sont effectuées dans l'ordre.

6. Ne dis pas n'importe quoi. La fonction d'échange de données entre les terminaux de votre bibliothèque l'exige, et pas seulement l'accès atomique.

7. Quelle est cette fonction ? Dis-moi en plus. Celui-là? Qu'est-ce qu'il y a de si drôle ? Peut-être que tu n'as pas compris quelque chose. Si cette fonction, c'était un intérêt sportif et rien de plus. Soit dit en passant, il s'agit d'une tâche très complexe et l'algorithme le plus optimal pour cette tâche (parmi ceux connus) est également assez délicat. Donc votre sarcasme est malheureux.

8. Ou peut-être devriez-vous trouver un emploi d'infirmière dans un jardin d'enfants ? Le niveau de la prédication est le même, convenable. Peut-être que le paragraphe précédent laisse entendre que je ne sais pas comment traduire le temps en secondes en heures minutes, etc. par les fonctions emkulya ?

9. Des problèmes de mémoire, ou de conscience de la réalité ? Rappelez-vous l'objet de la discussion : comment transformer une exécution parallèle de tâches en une exécution séquentielle.

 
Integer:

9. Des problèmes de mémoire, ou de conscience de la réalité ? Rappelez-vous l'objet de la conversation : comment transformer l'exécution parallèle des tâches en exécution séquentielle.

Votre hypothèse de désynchronisation est à l'origine du problème :

Entier:

Vadim, avez-vous essayé de l'appliquer ? Ça ne synchronise rien du tout. J'ai joué avec récemment. Vous devez construire la file d'attente vous-même. Malheureusement, cela ne réduit le code que de trois lignes. Ou peut-être que je ne le comprends pas.

Voici le code où la synchronisation fonctionne. Un accès atomique à la ressource est fourni. Le reste, c'est votre tripotage pour rassembler les fils en un seul fil. Je vous ai suggéré de réviser le mauvais algorithme. Il n'y a qu'une seule solution correcte à une telle tâche : combiner tout le code dans un seul et même thread. Ensuite, la ressource sera appelée dans l'ordre sans synchronisation. Le temps d'exécution du code sera le même qu'en exécution multithread. Restez simple.

 
Zhunko:

1. Votre hypothèse selon laquelle la synchronisation ne fonctionne pas a commencé avec vous :

Voici un code où la synchronisation fonctionne. Un accès atomique à la ressource est fourni. Le reste, c'est votre tripotage de la convergence des fils. Je vous ai suggéré de réviser le mauvais algorithme. La seule solution correcte à une telle tâche est de tout fusionner en un seul fil. Ensuite, la ressource sera appelée dans l'ordre sans synchronisation. Le temps d'exécution du code sera le même qu'en exécution multithread. Simplifiez-le.


1. Non pas à partir d'une hypothèse, mais à partir des résultats d'une expérience, qui, soit dit en passant, sont également confirmés par votre expérience de la page 378. 378.

2. Le code de la page 378 ne fournit qu'un accès atomique. Il n'y a pas de file d'attente pour l'exécution des tâches. Il peut arriver que l'une des tâches prenne beaucoup de temps à être exécutée.

 
Integer:


1. Non pas à partir de l'hypothèse, mais à partir des résultats de l'expérience, qui sont d'ailleurs confirmés par votre expérience de la page 378.

2. Le code de la page 378 ne fournit qu'un accès atomique. Les tâches ne sont pas mises en file d'attente pour l'exécution. Il peut arriver que l'une des tâches ne soit pas exécutée pendant une très longue période.

La file d'attente est créée par le système. Sa commande n'est pas garantie. L'exécution peut prendre beaucoup de temps. Y a-t-il un autre moyen dans cet algorithme défectueux qui implique un ordre spécial d'accès à une ressource partagée ? Vous ne savez pas quand les ticks sur les différents graphiques arriveront, quand les signaux dans le TS seront, etc ? Quelle différence cela fait-il, alors, de savoir dans quel ordre on accède à la ressource partagée ? Si le module est en attente dans cet algorithme, alors c'est correct (laissez-le attendre). Mais pas correct, dans le sens de la construction de l'algorithme.

Lis Richter. Il a déjà tout décrit correctement.

Raison: