I am wondering if optimality cuts in Benders algorithm exclude the possibility to have the same solutions and as a result, have the same optimality cut? I don't know why it is not possible to have the same cuts in different iterations of Benders decomposition algorithm.
It depends on whether you consider the master variable $\eta$ to be part of the solution. You can get the same master $x$ with a different $\eta$ after adding an optimality cut, but then the Benders decomposition algorithm would terminate because the solution is optimal to the original problem.
If I understand the question correctly, it is not possible to have the same optimality cut generated twice because (a) cuts are cumulative and (b) an optimality cut is only generated when an allegedly integer-feasible solution would violate the generated cut. So if you get solution 1, use it to generate cut 1 (which is added to the master), then get solution 2 which is feasible in the current master, solution 2 must satisfy cut 1. It may still incorrectly estimate the objective contribution of the subproblem, leading to another optimality cut (call it cut 2), but that cut will be different from cut 1 because solution 2 will satisfy cut 1 but violate cut 2.
If you are adding cuts on the fly via callback (rather than solving the master all the way, adding a cut, then solving the master again), and if you are using multiple threads, it might be possible for two different threads to trigger generation of the same cut before the cut makes it into the master (and is propagated to the various child processes). That would be fairly rare. Also, and again referring to the "one tree" approach, some solvers will let you allow cuts to expire. (CPLEX, for instance, refers to such cuts as "purgeable".) If you add optimality cuts that can and in some cases do expire, you run the risk to see them generated anew. Again, this would be pretty rare.